wxpay_sdk
微信支付 (временно реализована оплата с помощью сканирования кода, оплаты через приложение и H5-платформу, а также вспомогательные функции для обратных вызовов)
В работе пока используются только эти функции. На основе официальной версии PHP-SDK от WeChat реализован Python-вариант. В будущем планируется продолжить разработку и добавить другие типы платежей.
Если вам нужна эта функция, вы можете использовать её!
Установка: pip install wxpay_sdk
Использование:
params = {
'body': u'Ipad mini 16G белый', # Краткое описание товара или платёжного поручения, например: Ipad mini 16G белый
'out_trade_no': '9001231230956', # Внутренний номер заказа в системе продавца, 32 символа, может содержать буквы
'total_fee': 2, # Общая сумма заказа, в единицах
'product_id': '1116', # Идентификатор товара
'notify_url': 'http://145657w88r.iok.la/weixin/pay_callback/',
'trade_type':'NATIVE',
}
wechatpay_qrcode_config = {
'wechatpay_appid': 'xxxxxxx', # Обязательно, идентификатор публичного аккаунта WeChat, предоставленный WeChat
'wechatpay_key': 'xxxxx', # Обязательно, ключ appid
'wechatpay_mchid': 'xxxxx', # Обязательно, номер торгового счёта, предоставленный WeChat для оплаты
'wechatpay_appsecret': 'xxxxxx',
}
wxpay = WxPayBasic(conf=wechatpay_qrcode_config)
code_url = wxpay.unifiedorder2_get_code_url(**params)
Последующая обработка превращает code_url в QR-код для оплаты с помощью сканирования.
.........
params = {
'body': u'Ipad mini 16G белый', # Краткое описание товара или платёжного поручения, например: Ipad mini 16G белый
'out_trade_no': '9401231230956', # Внутренний номер заказа в системе продавца, 32 символа, может содержать буквы
'total_fee': 2, # Общая сумма заказа, в единицах
'product_id': '2116', # Идентификатор товара
'notify_url': 'http://145657w88r.iok.la/weixin/pay_callback/',
'trade_type':'APP',
}
wechatpay_qrcode_config = {
'wechatpay_appid': 'xxxxx', # Обязательно, идентификатор публичного аккаунта WeChat, предоставленный WeChat
'wechatpay_key': 'xxxxxxx', # Обязательно, ключ appid
'wechatpay_mchid': 'xxxxx', # Обязательно, номер торгового счёта, предоставленный WeChat для оплаты
'wechatpay_appsecret': 'xxxxxx',
}
wxpay = WxPayBasic(conf=wechatpay_qrcode_config)
app_result = wxpay.unifiedorder_get_app_url(**params)
Последующая обработка передаёт app_result клиенту приложения, который использует этот параметр для инициирования запроса через SDK клиента.
..........
params = {
'openid':'',
'body': u'Ipad mini 16G белый', # Краткое описание товара или платёжного поручения, например: Ipad mini 16G белый
'out_trade_no': '940123123sdaf956', # Внутренний номер заказа в системе продавца, 32 символа, может содержать буквы
'total_fee': 1, # Общая сумма заказа, в единицах
'product_id': '2116', # Идентификатор товара
'notify_url': 'http://145657w88r.iok.la/weixin/pay_callback/',
'trade_type':'JSAPI',
}
wechatpay_qrcode_config = {
'wechatpay_appid': 'xxxxxxxxxxx', # Обязательно, идентификатор публичного аккаунта WeChat, предоставленный WeChat
'wechatpay_key': 'xxxxxxxxxxx',
'wechatpay_mchid': 'xxxxxxxxxxx', # Обязательно, номер торгового счёта, предоставленный WeChat для оплаты
'wechatpay_appsecret': 'xxxxxxxxxxx', # Обязательно, ключ appid
}
wxpay = WxPayBasic(conf=wechatpay_qrcode_config)
app_result = wxpay.get_js_api_parameters(**params)
Последующая обработка передаёт app_result в клиент H5 на WeChat, который использует этот параметр для инициирования запроса через SDK клиента. ..........
@csrf_exempt
def wechat_pay_callback(request, *args, **kwargs):
req_xml_str = request.body
# Обработка обратного вызова: проверка подписи, проверка заказа
# Возврат результата проверки (может быть возвращён непосредственно в WeChat в виде xml)
wechatpay_qrcode_config = {
'wechatpay_appid': 'xxxxxx', # Обязательно, идентификатор публичного аккаунта WeChat, предоставленный WeChat
'wechatpay_key': 'xxxxxx', # Обязательно, ключ appid
'wechatpay_mchid': 'xxxxxx', # Обязательно, номер торгового счёта, предоставленный WeChat для оплаты
'wechatpay_appsecret': 'xxxxxxx',
}
# wechatpay_qrcode_config = {
# 'wechatpay_appid': 'xxxxx', # Обязательно, идентификатор публичного аккаунта WeChat, предоставленный WeChat
# 'wechatpay_key': 'xxxxx', # Обязательно, ключ appid
# 'wechatpay_mchid': 'xxxxx', # Обязательно, номер торгового счёта, предоставленный WeChat для оплаты
# 'wechatpay_appsecret': 'xxxxx',
# }
wxpay = WxPayBasic(conf=wechatpay_qrcode_config)
res_xml_str = wxpay.wxpay_callback(req_xml_str)
res_xml_dict = xmltodict.parse(res_xml_str)
if res_xml_dict['xml']['return_code'] == 'SUCCESS':
# Обработка логики заказа продавца
req_xml_dict = xmltodict.parse(req_xml_str)
total_fee = req_xml_dict['xml']['total_fee']
out_trade_no = req_xml_dict['xml']['out_trade_no']
............
else:
print 'wxpay callback error'
return HttpResponse(res_xml_str, content_type='text/xml')
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )