# wxpay_sdk **Repository Path**: minkedong/wxpay_sdk ## Basic Information - **Project Name**: wxpay_sdk - **Description**: 微信支付(暂时实现了:扫码支付&&APP支付&&h5支付&&回调辅助函数) - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 49 - **Forks**: 11 - **Created**: 2016-07-01 - **Last Updated**: 2024-11-25 ## Categories & Tags **Categories**: payment-dev **Tags**: None ## README ***wxpay_sdk*** 微信支付(暂时实现了扫码支付、app支付、h5支付、回调辅助函数) 由于工作中暂时只用到了这些,按照微信支付官方SDK的PHP版本,实现了python版本,后面如果有时间会继续实现其他类型支付, 有用到微信支付的童鞋,可以方便的使用之!!! **安装:** pip install wxpay_sdk **使用:** # 1.扫码支付 模式二 # params = { 'body': u'Ipad mini 16G 白色', # 商品或支付单简要描述,例如:Ipad mini 16G 白色 'out_trade_no': '9001231230956', # 商户系统内部的订单号,32个字符内、可包含字母 'total_fee': 2, # 订单总金额,单位为分 'product_id': '1116', # 商品ID 'notify_url': 'http://145657w88r.iok.la/weixin/pay_callback/', 'trade_type':'NATIVE', } wechatpay_qrcode_config = { 'wechatpay_appid': 'xxxxxxx', # 必填,微信分配的公众账号ID 'wechatpay_key': 'xxxxx', # 必填,appid 密钥 'wechatpay_mchid': 'xxxxx', # 必填,微信支付分配的商户号 'wechatpay_appsecret': 'xxxxxx', } wxpay = WxPayBasic(conf=wechatpay_qrcode_config) code_url = wxpay.unifiedorder2_get_code_url(**params) 后续处理把code_url做成二维码供用户扫码支付 ......... # 2.app支付 # params = { 'body': u'Ipad mini 16G 白色', # 商品或支付单简要描述,例如:Ipad mini 16G 白色 'out_trade_no': '9401231230956', # 商户系统内部的订单号,32个字符内、可包含字母 'total_fee': 2, # 订单总金额,单位为分 'product_id': '2116', # 商品ID 'notify_url': 'http://145657w88r.iok.la/weixin/pay_callback/', 'trade_type':'APP', } wechatpay_qrcode_config = { 'wechatpay_appid': 'xxxxx', # 必填,微信分配的公众账号ID 'wechatpay_key': 'xxxxxxx', # 必填,appid 密钥 'wechatpay_mchid': 'xxxxx', # 必填,微信支付分配的商户号 'wechatpay_appsecret': 'xxxxxx', } wxpay = WxPayBasic(conf=wechatpay_qrcode_config) app_result = wxpay.unifiedorder_get_app_url(**params) 后续处理把app_result传递给app客户端,由客户端sdk使用此参数发起请求即可 .......... # 3.微信公众号h5支付 # params = { 'openid':'', 'body': u'Ipad mini 16G 白色', # 商品或支付单简要描述,例如:Ipad mini 16G 白色 'out_trade_no': '940123123sdaf956', # 商户系统内部的订单号,32个字符内、可包含字母 'total_fee': 1, # 订单总金额,单位为分 'product_id': '2116', # 商品ID 'notify_url': 'http://145657w88r.iok.la/weixin/pay_callback/', 'trade_type':'JSAPI', } wechatpay_qrcode_config = { 'wechatpay_appid': 'xxxxxxxxxxx', # 必填,微信分配的公众账号ID 'wechatpay_key': 'xxxxxxxxxxx', 'wechatpay_mchid': 'xxxxxxxxxxx', # 必填,微信支付分配的商户号 'wechatpay_appsecret': 'xxxxxxxxxxx', # 必填,appid 密钥 } wxpay = WxPayBasic(conf=wechatpay_qrcode_config) app_result = wxpay.get_js_api_parameters(**params) 后续处理把app_result传递给微信js客户端,由客户端sdk使用此参数发起请求即可 .......... # 4支付回调定义 (注意:扫码支付&&app支付,使用的是不同config)# # (以django的views为例) @csrf_exempt def wechat_pay_callback(request, *args, **kwargs): req_xml_str = request.body # 回调处理:签名验证,订单查询验证 # 返回验证结果(可作为直接返回给微信的xml) wechatpay_qrcode_config = { 'wechatpay_appid': 'xxxxxx', # 必填,微信分配的公众账号ID 'wechatpay_key': 'xxxxxx', # 必填,appid 密钥 'wechatpay_mchid': 'xxxxxx', # 必填,微信支付分配的商户号 'wechatpay_appsecret': 'xxxxxxx', } # wechatpay_qrcode_config = { # 'wechatpay_appid': 'xxxxx', # 必填,微信分配的公众账号ID # 'wechatpay_key': 'xxxxx', # 必填,appid 密钥 # 'wechatpay_mchid': 'xxxxx', # 必填,微信支付分配的商户号 # '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')