432 lines
11 KiB
Python
432 lines
11 KiB
Python
# -*- coding: utf-8 -*-
|
||
from __future__ import absolute_import, unicode_literals
|
||
|
||
from wechatpy.client.api.base import BaseWeChatAPI
|
||
|
||
|
||
class WeChatCard(BaseWeChatAPI):
|
||
|
||
API_BASE_URL = 'https://api.weixin.qq.com/'
|
||
|
||
def create(self, card_data):
|
||
"""
|
||
创建卡券
|
||
|
||
:param card_data: 卡券信息
|
||
:return: 创建的卡券 ID
|
||
"""
|
||
result = self._post(
|
||
'card/create',
|
||
data=card_data,
|
||
result_processor=lambda x: x['card_id']
|
||
)
|
||
return result
|
||
|
||
def batch_add_locations(self, location_data):
|
||
"""
|
||
批量导入门店信息
|
||
|
||
:param location_data: 门店信息
|
||
:return: 门店 ID 列表,插入失败的门店元素值为 -1
|
||
"""
|
||
result = self._post(
|
||
'card/location/batchadd',
|
||
data=location_data,
|
||
result_processor=lambda x: x['location_id_list']
|
||
)
|
||
return result
|
||
|
||
def batch_get_locations(self, offset=0, count=0):
|
||
"""
|
||
批量获取门店信息
|
||
"""
|
||
return self._post(
|
||
'card/location/batchget',
|
||
data={
|
||
'offset': offset,
|
||
'count': count
|
||
}
|
||
)
|
||
|
||
def get_colors(self):
|
||
"""
|
||
获得卡券的最新颜色列表,用于创建卡券
|
||
:return: 颜色列表
|
||
"""
|
||
result = self._get(
|
||
'card/getcolors',
|
||
result_processor=lambda x: x['colors']
|
||
)
|
||
return result
|
||
|
||
def create_qrcode(self, qrcode_data):
|
||
"""
|
||
创建卡券二维码
|
||
|
||
:param qrcode_data: 二维码信息
|
||
:return: 二维码 ticket,可使用 :func:show_qrcode 换取二维码文件
|
||
"""
|
||
result = self._post(
|
||
'card/qrcode/create',
|
||
data=qrcode_data,
|
||
result_processor=lambda x: x['ticket']
|
||
)
|
||
return result
|
||
|
||
def create_landingpage(self, buffer_data):
|
||
"""
|
||
创建货架
|
||
"""
|
||
result = self._post(
|
||
'card/landingpage/create',
|
||
data=buffer_data
|
||
)
|
||
return result
|
||
|
||
def get_html(self, card_id):
|
||
"""
|
||
图文消息群发卡券
|
||
"""
|
||
result = self._post(
|
||
'card/mpnews/gethtml',
|
||
data={
|
||
'card_id': card_id
|
||
},
|
||
result_processor=lambda x: x['content']
|
||
)
|
||
return result
|
||
|
||
def consume_code(self, code, card_id=None):
|
||
"""
|
||
消耗 code
|
||
"""
|
||
card_data = {
|
||
'code': code
|
||
}
|
||
if card_id:
|
||
card_data['card_id'] = card_id
|
||
return self._post(
|
||
'card/code/consume',
|
||
data=card_data
|
||
)
|
||
|
||
def decrypt_code(self, encrypt_code):
|
||
"""
|
||
解码加密的 code
|
||
"""
|
||
result = self._post(
|
||
'card/code/decrypt',
|
||
data={
|
||
'encrypt_code': encrypt_code
|
||
},
|
||
result_processor=lambda x: x['code']
|
||
)
|
||
return result
|
||
|
||
def delete(self, card_id):
|
||
"""
|
||
删除卡券
|
||
"""
|
||
return self._post(
|
||
'card/delete',
|
||
data={
|
||
'card_id': card_id
|
||
}
|
||
)
|
||
|
||
def get_code(self, code, card_id=None, check_consume=True):
|
||
"""
|
||
查询 code 信息
|
||
"""
|
||
card_data = {
|
||
'code': code
|
||
}
|
||
if card_id:
|
||
card_data['card_id'] = card_id
|
||
if not check_consume:
|
||
card_data['check_consume'] = check_consume
|
||
return self._post(
|
||
'card/code/get',
|
||
data=card_data
|
||
)
|
||
|
||
def get_card_list(self, openid, card_id=None):
|
||
"""
|
||
用于获取用户卡包里的,属于该appid下的卡券。
|
||
"""
|
||
card_data = {
|
||
'openid': openid
|
||
}
|
||
if card_id:
|
||
card_data['card_id'] = card_id
|
||
return self._post(
|
||
'card/user/getcardlist',
|
||
data=card_data
|
||
)
|
||
|
||
def batch_get(self, offset=0, count=50, status_list=None):
|
||
"""
|
||
批量查询卡券信息
|
||
"""
|
||
card_data = {
|
||
'offset': offset,
|
||
'count': count
|
||
}
|
||
if status_list:
|
||
card_data['status_list'] = status_list
|
||
return self._post(
|
||
'card/batchget',
|
||
data=card_data
|
||
)
|
||
|
||
def get(self, card_id):
|
||
"""
|
||
查询卡券详情
|
||
"""
|
||
result = self._post(
|
||
'card/get',
|
||
data={
|
||
'card_id': card_id
|
||
},
|
||
result_processor=lambda x: x['card']
|
||
)
|
||
return result
|
||
|
||
def update_code(self, card_id, old_code, new_code):
|
||
"""
|
||
更新卡券 code
|
||
"""
|
||
return self._post(
|
||
'card/code/update',
|
||
data={
|
||
'card_id': card_id,
|
||
'code': old_code,
|
||
'new_code': new_code
|
||
}
|
||
)
|
||
|
||
def invalid_code(self, code, card_id=None):
|
||
"""
|
||
设置卡券失效
|
||
"""
|
||
card_data = {
|
||
'code': code
|
||
}
|
||
if card_id:
|
||
card_data['card_id'] = card_id
|
||
return self._post(
|
||
'card/code/unavailable',
|
||
data=card_data
|
||
)
|
||
|
||
def update(self, card_data):
|
||
"""
|
||
更新卡券信息
|
||
"""
|
||
return self._post(
|
||
'card/update',
|
||
data=card_data
|
||
)
|
||
|
||
def set_paycell(self, card_id, is_open):
|
||
"""
|
||
更新卡券信息
|
||
"""
|
||
return self._post(
|
||
'card/paycell/set',
|
||
data={
|
||
'card_id': card_id,
|
||
'is_open': is_open
|
||
}
|
||
)
|
||
|
||
def set_test_whitelist(self, openids=None, usernames=None):
|
||
"""
|
||
设置卡券测试用户白名单
|
||
"""
|
||
openids = openids or []
|
||
usernames = usernames or []
|
||
return self._post(
|
||
'card/testwhitelist/set',
|
||
data={
|
||
'openid': openids,
|
||
'username': usernames
|
||
}
|
||
)
|
||
|
||
def activate_membercard(self, membership_number, code, init_bonus=0,
|
||
init_balance=0, card_id=None):
|
||
"""
|
||
激活/绑定会员卡
|
||
"""
|
||
card_data = {
|
||
'membership_number': membership_number,
|
||
'code': code,
|
||
'init_bonus': init_bonus,
|
||
'init_balance': init_balance
|
||
}
|
||
if card_id:
|
||
card_data['card_id'] = card_id
|
||
return self._post(
|
||
'card/membercard/activate',
|
||
data=card_data
|
||
)
|
||
|
||
def update_membercard(self, code, add_bonus=0, record_bonus='',
|
||
add_balance=0, record_balance='', card_id=None):
|
||
"""
|
||
会员卡交易更新信息
|
||
"""
|
||
card_data = {
|
||
'code': code,
|
||
'add_bonus': add_bonus,
|
||
'add_balance': add_balance,
|
||
'record_bonus': record_bonus,
|
||
'record_balance': record_balance
|
||
}
|
||
if card_id:
|
||
card_data['card_id'] = card_id
|
||
return self._post(
|
||
'card/membercard/updateuser',
|
||
data=card_data
|
||
)
|
||
|
||
def update_movie_ticket(self, code, ticket_class, show_time, duration,
|
||
screening_room, seat_number, card_id=None):
|
||
"""
|
||
更新电影票
|
||
"""
|
||
ticket = {
|
||
'code': code,
|
||
'ticket_class': ticket_class,
|
||
'show_time': show_time,
|
||
'duration': duration,
|
||
'screening_room': screening_room,
|
||
'seat_number': seat_number
|
||
}
|
||
if card_id:
|
||
ticket['card_id'] = card_id
|
||
return self._post(
|
||
'card/movieticket/updateuser',
|
||
data=ticket
|
||
)
|
||
|
||
def checkin_boardingpass(self, code, passenger_name, seat_class,
|
||
etkt_bnr, seat='', gate='', boarding_time=None,
|
||
is_cancel=False, qrcode_data=None, card_id=None):
|
||
"""
|
||
飞机票接口
|
||
"""
|
||
data = {
|
||
'code': code,
|
||
'passenger_name': passenger_name,
|
||
'class': seat_class,
|
||
'etkt_bnr': etkt_bnr,
|
||
'seat': seat,
|
||
'gate': gate,
|
||
'is_cancel': is_cancel
|
||
}
|
||
if boarding_time:
|
||
data['boarding_time'] = boarding_time
|
||
if qrcode_data:
|
||
data['qrcode_data'] = qrcode_data
|
||
if card_id:
|
||
data['card_id'] = card_id
|
||
return self._post(
|
||
'card/boardingpass/checkin',
|
||
data=data
|
||
)
|
||
|
||
def update_luckymoney_balance(self, code, balance, card_id=None):
|
||
"""
|
||
更新红包余额
|
||
"""
|
||
card_data = {
|
||
'code': code,
|
||
'balance': balance
|
||
}
|
||
if card_id:
|
||
card_data['card_id'] = card_id
|
||
return self._post(
|
||
'card/luckymoney/updateuserbalance',
|
||
data=card_data
|
||
)
|
||
|
||
def get_redirect_url(self, url, encrypt_code, card_id):
|
||
"""
|
||
获取卡券跳转外链
|
||
"""
|
||
from wechatpy.utils import WeChatSigner
|
||
|
||
code = self.decrypt_code(encrypt_code)
|
||
|
||
signer = WeChatSigner()
|
||
signer.add_data(self.secret)
|
||
signer.add_data(code)
|
||
signer.add_data(card_id)
|
||
signature = signer.signature
|
||
|
||
r = '{url}?encrypt_code={code}&card_id={card_id}&signature={signature}'
|
||
return r.format(
|
||
url=url,
|
||
code=encrypt_code,
|
||
card_id=card_id,
|
||
signature=signature
|
||
)
|
||
|
||
def deposit_code(self, card_id, codes):
|
||
"""
|
||
导入code
|
||
"""
|
||
card_data = {
|
||
'card_id': card_id,
|
||
'code': codes
|
||
}
|
||
return self._post(
|
||
'card/code/deposit',
|
||
data=card_data
|
||
)
|
||
|
||
def get_deposit_count(self, card_id):
|
||
"""
|
||
查询导入code数目
|
||
"""
|
||
card_data = {
|
||
'card_id': card_id,
|
||
}
|
||
return self._post(
|
||
'card/code/getdepositcount',
|
||
data=card_data
|
||
)
|
||
|
||
def check_code(self, card_id, codes):
|
||
"""
|
||
核查code
|
||
"""
|
||
card_data = {
|
||
'card_id': card_id,
|
||
'code': codes
|
||
}
|
||
return self._post(
|
||
'card/code/checkcode',
|
||
data=card_data
|
||
)
|
||
|
||
def modify_stock(self, card_id, n):
|
||
"""
|
||
修改库存
|
||
"""
|
||
if n == 0:
|
||
return
|
||
card_data = {
|
||
'card_id': card_id,
|
||
}
|
||
if n > 0:
|
||
card_data['increase_stock_value'] = n
|
||
elif n < 0:
|
||
card_data['reduce_stock_value'] = -n
|
||
return self._post(
|
||
'card/modifystock',
|
||
data=card_data
|
||
)
|