记录一次用python升级微信支付的代金券的接口

最近打开微信支付的后台,做代金券页面竟然要升级接口

官方给了一堆文档,一如既往读的头疼

于是微信开发者社区看到一篇文章

借鉴一下,来这里mark一下

首先你要先安装python不会的话去参照这个链接安装一下

https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624

我就是参照这个安装的,安装的3.x版本

安装成功后看一下版本

 出现这个就是安装成功

然后接下来打开微信支付的后台

提前准备好

1.微信支付商户号

2.api秘钥

好了接下来

准备开始

随便新建一个.py的文件,在这里我是命名为1.py

接下来随便用个编辑器打开,我这里用的hubider你用vscdoe都行,用记事本都ok

复制的微信社区一个大佬的代码

复制之前先替换一下里面对应内容

import time
from xml.dom import minidom
 
import hashlib
from heapq import heappush, heappop
from collections import OrderedDict

import requests

SandBox_Url = 'https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey'
MicroPay_Url = "https://api.mch.weixin.qq.com/sandboxnew/pay/micropay"
UnifiedOrder_Url = "https://api.mch.weixin.qq.com/sandboxnew/pay/unifiedorder"
OrderQuery_Url = "https://api.mch.weixin.qq.com/sandboxnew/pay/orderquery"
ReFund_Url = "https://api.mch.weixin.qq.com/sandboxnew/pay/refund"
RefundQuery_Url = "https://api.mch.weixin.qq.com/sandboxnew/pay/refundquery"
DownloadBill_Url = "https://api.mch.weixin.qq.com/sandboxnew/pay/downloadbill"
nonce_str = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS"

if __name__ == '__main__':
    mch_id = "这里放微信商户号"
    wxpay_key = "这里放秘钥"
 
def get_sign_key(mch_id, key):
    template = "<xml><mch_id><![CDATA[{0}]]></mch_id>" \
               "<nonce_str><![CDATA[{1}]]></nonce_str>" \
               "<sign><![CDATA[{2}]]></sign></xml>"
    nonce_str = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS"
    encrypted_str = "mch_id=" + mch_id + "&nonce_str=" + nonce_str + "&key=" + key
    m = hashlib.md5()
    m.update(encrypted_str.encode('utf-8'))
    sign_key_request_data = template.format(mch_id, nonce_str, m.hexdigest().upper())
    result = requests.post(SandBox_Url, sign_key_request_data)
    dom = minidom.parseString(result.content)
    root = dom.documentElement
    sandbox_signkey = ''
    if root.getElementsByTagName("return_code")[0].childNodes[0].nodeValue == "FAIL":
        retmsg = root.getElementsByTagName("return_msg")[0].childNodes[0].nodeValue
        raise RuntimeError("请求出了点小错误:" + retmsg)
    else:
        sandbox_signkey = root.getElementsByTagName("sandbox_signkey")[0].childNodes[0].nodeValue
    print("亲,这就是你的沙箱密钥了哦: \n" + sandbox_signkey)
    return sandbox_signkey

def to_tree_map(param_map):
    keys = param_map.keys()
    heap = []
    for item in keys:
        heappush(heap, item)
 
    sort = []
    while heap:
        sort.append(heappop(heap))
 
    res_map = OrderedDict()
    for key in sort:
        res_map[key] = param_map.get(key)
 
    return res_map
 
 
def build_xml(param, wxpay_key):
    tree_map = to_tree_map(param)
    encrypted_str = ""
    for k in tree_map:
        encrypted_str += "{}={}&".format(k, tree_map[k])
    encrypted_str = encrypted_str + "key=" + wxpay_key
    m = hashlib.md5()
    m.update(encrypted_str.encode('utf-8'))
    sign = m.hexdigest().upper()
    param.update(sign=sign)
 
    complete_tree_map = to_tree_map(param)
    xml = "<xml>"
    for k in complete_tree_map:
        xml += "<{}><![CDATA[{}]]></{}>".format(k, complete_tree_map[k], k)
    xml += "</xml>"
    return xml
 
 
def request_handler(url, xml, desc):
    result = requests.post(url, xml)
    print(desc + "我才不是请求结果呢:\n" + result.content.decode("utf-8"))
 

def upgrade(mch_id, wxpay_key):
    if mch_id == "":
        raise RuntimeError("出差错了哦,亲,你的商户号在哪呢?不填写商户号亲亲是要给空气去验收吗?")
 
    if wxpay_key == "":
        raise RuntimeError("出差错了哦,亲,你不填写商户密钥怎么继续呢,是用爱吗?")
    key = get_sign_key(mch_id, wxpay_key)
    nonce_str = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS"
    out_trade_no = round(time.time())
    MicroPay_param = {
                 'appid': "wxd678efh567hg6787",
                 'mch_id': mch_id,
                 'nonce_str': nonce_str, 
                 'body': "check",
                 'out_trade_no': out_trade_no, 
                 'total_fee': "501", 
                 'spbill_create_ip': "8.8.8.8",
                 'auth_code': "120061098828009406", 
                }
    MicroPay_xml = build_xml(MicroPay_param, key)
    request_handler(MicroPay_Url, MicroPay_xml, "亲,用例编号1001刷卡正常支付有结果了,快来看呀 \n")
    time.sleep(1)
    
    OrderQuery_param = {
                       'appid': "wxd678efh567hg6787",
                       'mch_id': mch_id, 
                       'nonce_str': nonce_str,
                       'out_trade_no': out_trade_no,
                      }
    OrderQuery_xml = build_xml(OrderQuery_param, key)
    request_handler(OrderQuery_Url, OrderQuery_xml, "亲,用例编号1001刷卡正常支付查询出结果了,快来看呀 \n")
    time.sleep(1)
    
    out_trade_no_2nd = round(time.time())
    print("我是1002下单的订单号:",+ out_trade_no_2nd)
    MicroPay_param = {
                 'appid': "wxd678efh567hg6787",
                 'mch_id': mch_id,
                 'nonce_str': nonce_str, 
                 'body': "check",
                 'out_trade_no': out_trade_no_2nd, 
                 'total_fee': "502", 
                 'spbill_create_ip': "8.8.8.8",
                 'auth_code': "120061098828009406",
                 }
    MicroPay_xml = build_xml(MicroPay_param, key)
    request_handler(MicroPay_Url, MicroPay_xml, "亲,用例编号1002刷卡正常支付结果来了,你还抓紧不来看 \n")
    time.sleep(1)
    
    OrderQuery_param = {
                       'appid': "wxd678efh567hg6787",
                       'mch_id': mch_id, 
                       'nonce_str': nonce_str,
                       'out_trade_no': out_trade_no_2nd,
                      }
    OrderQuery_xml = build_xml(OrderQuery_param, key)
    request_handler(OrderQuery_Url, OrderQuery_xml, "亲,用例编号1002刷卡正常支付查询结果,结果好像有点不太对呢 \n")
    time.sleep(1)
 
    ReFund_param = {
                    'appid': "wxd678efh567hg6787", 
                    'mch_id': mch_id, 
                    'nonce_str':nonce_str,
                    'out_refund_no': out_trade_no,
                    'total_fee': "502",
                    'refund_fee': "501",  
                    'out_trade_no': out_trade_no_2nd,
                    }
 
    ReFund_xml = build_xml(ReFund_param, key)
    request_handler(ReFund_Url, ReFund_xml, "亲,下面展示的是用例编号1002刷卡支付退款的结果,你猜对不对 \n")
    time.sleep(1)
    
    RefundQuery_param = {
                          'appid': "wxd678efh567hg6787", 
                          'mch_id': mch_id,
                          'nonce_str':nonce_str,
                          'out_trade_no': out_trade_no_2nd, 
                          }
 
    RefundQuery_xml = build_xml(RefundQuery_param, key)
    request_handler(RefundQuery_Url, RefundQuery_xml, "亲,用例编号1002刷卡支付退款查询结果返回中,加载不出来长按电源键或Ait+F4重试哦 \n")
    time.sleep(1)
    
    nonce_str = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS"
    out_trade_no = round(time.time())
    UnifiedOrder_param = {
                 'appid': "wxd678efh567hg6787",
                 'mch_id': mch_id,
                 'nonce_str': nonce_str, 
                 'body': "check",
                 'out_trade_no': out_trade_no, 
                 'total_fee': "551", 
                 'notify_url':"https://www.weixin.qq.com/wxpay/pay.php",
                 'spbill_create_ip': "8.8.8.8",
                 'trade_type': "JSAPI", 
                }
    UnifiedOrder_xml = build_xml(UnifiedOrder_param, key)
    request_handler(UnifiedOrder_Url, UnifiedOrder_xml, "亲,用例编号1003-公众号/APP/扫码正常支付有结果了,快来看呀 \n")
    time.sleep(1)
    OrderQuery_param = {
                       'appid': "wxd678efh567hg6787",
                       'mch_id': mch_id, 
                       'nonce_str': nonce_str,
                       'out_trade_no': out_trade_no,
                      }
    OrderQuery_xml = build_xml(OrderQuery_param, key)
    request_handler(OrderQuery_Url, OrderQuery_xml, "亲,用例编号1003-公众号/APP/扫码正常支付查询出结果了,快来看呀 \n")
    time.sleep(1)
    
    out_trade_no_2nd = round(time.time() * 1000)
    print("我是1002下单的订单号:",+ out_trade_no_2nd)
    UnifiedOrder_param = {
                 'appid': "wxd678efh567hg6787",
                 'mch_id': mch_id,
                 'nonce_str': nonce_str, 
                 'body': "check",
                 'out_trade_no': out_trade_no_2nd, 
                 'total_fee': "552", 
                 'notify_url':"https://www.weixin.qq.com/wxpay/pay.php",
                 'spbill_create_ip': "8.8.8.8",
                 'trade_type': "JSAPI", 
                 }
    UnifiedOrder_xml = build_xml(UnifiedOrder_param, key)
    request_handler(UnifiedOrder_Url, UnifiedOrder_xml, "亲,用例编号1004-公众号/APP/扫码支付退款结果来了,你还抓紧不来看 \n")
    time.sleep(1)
    
    OrderQuery_param = {
                       'appid': "wxd678efh567hg6787",
                       'mch_id': mch_id, 
                       'nonce_str': nonce_str,
                       'out_trade_no': out_trade_no_2nd,
                      }
    OrderQuery_xml = build_xml(OrderQuery_param, key)
    request_handler(OrderQuery_Url, OrderQuery_xml, "亲,用例编号1004-公众号/APP/扫码支付退款查询结果,结果好像有点不太对呢 \n")
    time.sleep(1)
 
    ReFund_param = {
                    'appid': "wxd678efh567hg6787", 
                    'mch_id': mch_id, 
                    'nonce_str':nonce_str,
                    'out_refund_no': out_trade_no,
                    'total_fee': "552",
                    'refund_fee': "551",  
                    'out_trade_no': out_trade_no_2nd,
                    }
 
    ReFund_xml = build_xml(ReFund_param, key)
    request_handler(ReFund_Url, ReFund_xml, "亲,下面展示的是用例编号1004-公众号/APP/扫码支付退款的结果,你猜对不对 \n")
    time.sleep(1)
    
    RefundQuery_param = {
                          'appid': "wxd678efh567hg6787", 
                          'mch_id': mch_id,
                          'nonce_str':nonce_str,
                          'out_trade_no': out_trade_no_2nd, 
                          }
 
    RefundQuery_xml = build_xml(RefundQuery_param, key)
    request_handler(RefundQuery_Url, RefundQuery_xml, "亲,用例编号1004-公众号/APP/扫码支付退款查询结果返回中,加载不出来长按电源键或Ait+F4重试哦 \n")
    time.sleep(1)
    
    DownloadBill_param = {
                           'appid': "wxd678efh567hg6787", 
                           'mch_id': mch_id, 
                           'nonce_str': nonce_str,
                           'bill_date': "2021-04-01", 
                           'bill_type': "ALL"
                          }
 
    DownloadBill_xml = build_xml(DownloadBill_param, key)
    request_handler(DownloadBill_Url, DownloadBill_xml, "亲,你要下载交易的对账单来了,加载中······,加载不出来长按电源键或Ait+F4重试哦 \n")
 
upgrade(mch_id, wxpay_key) 

大佬的文章等会放在底部

然后再这个文件夹下打开cmd

python 1.py运行

报错,是对应的包没有安装

py的包不是npm是pip命令

 

安装一下这个包

然后重新 python 1.py

多运行两次,本地沙箱环境

然后去这个链接查看升级成功没有

https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=15_6&index=4

然后再返回微信支付代金券查看接口就升级成功

 

 

参考微信社区大佬链接

https://developers.weixin.qq.com/community/develop/article/doc/0002e82b060c3028230c915f150813

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

镜中的女孩-potato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值