扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在微信支付之后,小程序会主动向服务端发送支付状态.为了防止恶意篡改,必须生成签名发送给服务端进行验证.
瓯海网站建设公司创新互联,瓯海网站设计制作,有大型网站制作公司丰富经验。已为瓯海近1000家提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的瓯海做网站的公司定做!
签名生成官方文档:
签名验证分为如下几步:
1.与服务端确认上传的签名内容(即上传参数key=value)以及加密方式.并且要到商户平台设置的密钥key.
2.生成随机字符串nonceStr.
3.将要上传的参数,对参数按照key=value的格式,并按照参数名ASCII字典序排序,比如:
假设传送的参数如下:
appid: wxd930ea5d5a258f4f
mch_id: 10000100
device_info: 1000
body: test
nonce_str: ibuaiVcKdpRxkhJA
则:stringA="appid=wxd930ea5d5a258f4fbody=testdevice_info=1000mch_id=10000100nonce_str=ibuaiVcKdpRxkhJA";
4.拼接API密钥,例如:stringSignTemp=stringA+"key=192006250b4c09247ec02edce69f6a2d" //注:key为商户平台设置的密钥key
5.对拼接秘钥后的字符串进行加密并且转换为大写.(加密方式自定)
6.将参数以及加密得到的sign一起上传给服务端进行验证.
7.查看服务端返回结果.
谢谢大家~
第一次开发微信小程序,遇到了这个签名错误,在此进行记录。
接口链接:
微信验证签名工具地址:
统一下单官网地址L:
发送xml参数
其中,appid查找当前小程序的appid
mch_id,是当前商户号的id
spbill_create_ip 就是当前计算机ip
其余参数可以在官方文档中找到。通过官方文档的说明进行拼接,生成签名
当参数发过去后,显示的是签名错误,并且通过校验工具,显示是成功的。找了很久原因后,发现,需要在商户平台上重置api秘钥,
是因为签名最后拼接的key的问题。
第一次我设置过了这个秘钥,但总是显示签名错误。今天重置了一下,再次进行请求之后,该错误解决。
注:一定要对应的小程序和商户号,否则也会产生问题。
那是因为BundleID错误了或者没有填写,所以要重修设置过BundleID并发布。
跟着下面的步骤操作吧:
步骤一:登陆开发者中心网站,进入证书页面。
步骤二:在【App IDs】项的右上角点击【+】按钮,新建一个App ID。
步骤三:在BundleID填写出现问题的IOS包名。最后重新发布就ok啦。
Bundle ID主要分为两类:
Explicit App ID「明确的 App ID」,一般格式是:com.company.appName;这种 id 只能用在一个app上,每一个新应用都要创建并只有一个。
Wildcard App ID「通配符 App ID」, 一般格式是:com.domainname.* ;这种 id 可以用在多个应用上,虽然方便,但是使用这种id的应用不能使用通知功能,所以不常用。
1.检查服务器openssl支持版本与生成pem文件的openssl版本是否一致
2.官方给出PHP的签名类(RSASign)中私钥生成签名时开始与结束标签中没有RSA会返回false,
公钥验证签名时,不需要RSA,注意空格(重要)
3.openssl推荐通过exe文件安装,命令行安装需很多依赖,安装完成后配置环境变量中的系统变量Path至安装目录即可
4.执行以下命令生成公私钥(3个pem文件,可用文本打开)
1.下单的签名方式使用MD5方式
2.利用下单获取到的prepay_id,来进行调起支付阶段的paySign的签名
3.如果提示签名验证失败:
①首先检查你的5个参数是否完整:timeStamp,nonceStr,package,signType,paySign
②signType 必须是MD5,官方demo不是MD5,改为MD5,这也是大坑,当然我自己用python 写的时候直接用的MD5
③在做paySign签名的时候,需要6个参数,上述5个参数去掉paySign(不参与签名),加上appId(注意是大写I,这是个大坑,这个错了那签名必然失败)和key
④如果上述步骤没问题还是失败,那么去验证以下你的签名是否通过
⑤还有一点签名的时候必须把所有英文全部转为大写
4.欢迎评论,多多交流
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流