小程序
小游戏
企业微信
微信支付
扫描小程序码分享
环境变量是0 appkey也确定没搞错 为什么还是报错
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
把官方的 Demo 给 AI 让他翻译成你的语言的版本,不要自己写。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
报错的是 15005 还是 15006?
#!/usr/bin/python # -*- coding: utf-8 -*- """ pay_sig签名算法计算示例 """ import hmac import hashlib import json import time def calc_pay_sig(uri, post_body, appkey): """ pay_sig签名算法 Args: uri - 当前请求的API的uri部分,不带query_string 例如:/xpay/query_user_balance post_body - http POST的数据包体 appkey - 对应环境的AppKey Returns: 支付请求签名pay_sig """ need_sign_msg = uri + '&' + post_body pay_sig = hmac.new(key = appkey.encode('utf-8'), msg = need_sign_msg.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() return pay_sig def calc_signature(post_body, session_key): """ 用户登录态signature签名算法 Args: post_body - http POST的数据包体 session_key - 当前用户有效的session_key,参考auth.code2Session接口 Returns: 用户登录态签名signature """ need_sign_msg = post_body signature = hmac.new(key = session_key.encode('utf-8'), msg = need_sign_msg.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() return signature # uri,切记不可带参数,即去掉"?"及后面的部分 # 如果是基础库的wx.requestVirtualPayment,uri固定为requestVirtualPayment uri = '/xpay/query_user_balance' # 此处appkey为假设值,实际使用应根据支付环境(env参数)替换为对应的AppKey appkey = "12345" # 注意:JSON数据序列化结果,不同语言/版本结果可能不同 # 所以示例为了保证稳定性,直接用其中一个序列化的版本 # 实际使用时只需要保证,参与签名的post_body和真正发起http请求的一致即可 """ # 不同接口要求的Post Body参数不一样,此处以query_user_balance接口为例(和uri对应) post_body = json.dumps({ "openid": "xxx", "user_ip": "127.0.0.1", "env": 0 }) """ post_body = '{"openid": "xxx", "user_ip": "127.0.0.1", "env": 0}' # step1. pay_sig签名计算(支付请求签名算法) pay_sig = calc_pay_sig(uri, post_body, appkey) print("pay_sig:", pay_sig) # 若实际请求返回pay_sig签名不对,根据以下步骤排查: # 1. 确认算法:uri、post_body、appkey写死以上参数,确保你的签名算法和示例calc_pay_sig结果完全一致 # 2. 确认参数: # - uri不可带参数(即"?"及后续部分全部舍去) # - post_body必须和真正发起HTTP请求的post body完全一致 # - appkey必须是与请求中对应的环境匹配(env参数决定) assert pay_sig == "c37809f27c6d7fd1837ad2500a04512b66b34fd793a39a385fade56dca89a4b5" # step2. signature签名计算(用户登录态签名算法) # session_key需要为当前用户有效session_key(参考auth.code2Session接口获取) # 此处写死方便复现算法 session_key = "9hAb/NEYUlkaMBEsmFgzig==" signature = calc_signature(post_body, session_key) print("signature:", signature) # 若实际请求返回signature签名不对,参考随后的"90010-signature签名错误问题排查思路"进行排查 assert signature == "089d9e8dc5d308977360c4b79ec600a93d736802802a807d634192328032f6c7"
可以用官方的这个例子,一步步对比结果,看看哪一步有问题。
本回答由AI生成,可能已过期、失效或不适用于当前情形,请谨慎参考
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
把官方的 Demo 给 AI 让他翻译成你的语言的版本,不要自己写。
报错的是 15005 还是 15006?
#!/usr/bin/python # -*- coding: utf-8 -*- """ pay_sig签名算法计算示例 """ import hmac import hashlib import json import time def calc_pay_sig(uri, post_body, appkey): """ pay_sig签名算法 Args: uri - 当前请求的API的uri部分,不带query_string 例如:/xpay/query_user_balance post_body - http POST的数据包体 appkey - 对应环境的AppKey Returns: 支付请求签名pay_sig """ need_sign_msg = uri + '&' + post_body pay_sig = hmac.new(key = appkey.encode('utf-8'), msg = need_sign_msg.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() return pay_sig def calc_signature(post_body, session_key): """ 用户登录态signature签名算法 Args: post_body - http POST的数据包体 session_key - 当前用户有效的session_key,参考auth.code2Session接口 Returns: 用户登录态签名signature """ need_sign_msg = post_body signature = hmac.new(key = session_key.encode('utf-8'), msg = need_sign_msg.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() return signature # uri,切记不可带参数,即去掉"?"及后面的部分 # 如果是基础库的wx.requestVirtualPayment,uri固定为requestVirtualPayment uri = '/xpay/query_user_balance' # 此处appkey为假设值,实际使用应根据支付环境(env参数)替换为对应的AppKey appkey = "12345" # 注意:JSON数据序列化结果,不同语言/版本结果可能不同 # 所以示例为了保证稳定性,直接用其中一个序列化的版本 # 实际使用时只需要保证,参与签名的post_body和真正发起http请求的一致即可 """ # 不同接口要求的Post Body参数不一样,此处以query_user_balance接口为例(和uri对应) post_body = json.dumps({ "openid": "xxx", "user_ip": "127.0.0.1", "env": 0 }) """ post_body = '{"openid": "xxx", "user_ip": "127.0.0.1", "env": 0}' # step1. pay_sig签名计算(支付请求签名算法) pay_sig = calc_pay_sig(uri, post_body, appkey) print("pay_sig:", pay_sig) # 若实际请求返回pay_sig签名不对,根据以下步骤排查: # 1. 确认算法:uri、post_body、appkey写死以上参数,确保你的签名算法和示例calc_pay_sig结果完全一致 # 2. 确认参数: # - uri不可带参数(即"?"及后续部分全部舍去) # - post_body必须和真正发起HTTP请求的post body完全一致 # - appkey必须是与请求中对应的环境匹配(env参数决定) assert pay_sig == "c37809f27c6d7fd1837ad2500a04512b66b34fd793a39a385fade56dca89a4b5" # step2. signature签名计算(用户登录态签名算法) # session_key需要为当前用户有效session_key(参考auth.code2Session接口获取) # 此处写死方便复现算法 session_key = "9hAb/NEYUlkaMBEsmFgzig==" signature = calc_signature(post_body, session_key) print("signature:", signature) # 若实际请求返回signature签名不对,参考随后的"90010-signature签名错误问题排查思路"进行排查 assert signature == "089d9e8dc5d308977360c4b79ec600a93d736802802a807d634192328032f6c7"可以用官方的这个例子,一步步对比结果,看看哪一步有问题。