最近打开微信支付的后台,做代金券页面竟然要升级接口
官方给了一堆文档,一如既往读的头疼
于是微信开发者社区看到一篇文章
借鉴一下,来这里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