🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#接口安全说明 API签名算法 **第一步** 除上传的附件和数组参数外,其他请求参数内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则: ◆ 参数名ASCII码从小到大排序(字典序); ◆ 如果参数的值为空不参与签名; ◆ 参数名区分大小写; ◆ 传送的fwSignstr 参数不参与签名,将生成的签名与该fwSignstr 值作校验。 **第二步** 在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到fwSignstr值signValue。 **示例如下:** 假设传送的参数如下: ~~~ appid: wxd930ea5d5a258f4f mch_id: 10000100 device_info: 1000 body: test nonce_str: ibuaiVcKdpRxkhJA ~~~ 第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下: ~~~ stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA"; ~~~ 第二步:拼接API密钥: ~~~ stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d" //注:key为商户平台设置的密钥key sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7" //注:MD5签名方式 sign=hash_hmac("sha256",stringSignTemp,key).toUpperCase()="6A9AE1657590FD6257D693A078E1C3E4BB6BA4DC30B23E0EE2496E54170DACD6" //注:HMAC-SHA256签名方式 ~~~ 最终得到最终发送的数据: ~~~ appid: wxd930ea5d5a258f4f mch_id: 10000100 device_info: 1000 body: test nonce_str: ibuaiVcKdpRxkhJA fwSignstr: 9A0A8659F005D6984697E2CA0A9CF3B7 ~~~ **微信支付API接口协议中包含字段nonce_str,主要保证签名不可预测。我们推荐生成随机数算法如下:调用随机数函数生成,将得到的值转换为字符串。** ***** **签名原理同微信**:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3 ***** **终端安全说明** 1.访问API方式为POST; 2.访问API必须加签名; 3.签名密钥长度必须在50位及以上;**(推荐1024或2048位,使用openssl工具生成)** 4.任意涉及用户信息的接口都要验证用户Token是否有效; 5.屏蔽恶意点击操作; 6.使用TLS证书; ***** **服务器端接口安全说明** 1.仅支持POST方式接收数据; 2.终端每次请求接口都必须验签; 3.签名密钥长度必须在50位及以上;**(推荐1024或2048位,使用openssl工具生成)** 4.任意涉及用户信息的接口必须验证用户Token是否有效; 5.过滤1分钟内恶请求的IP; 6.必须验签在线支付回调通知的数据;(验证签名及订单金额) 7.用户Token必须定时过期; 8.H5网页以GET方式验签(或加密URL后缀参数); 9.使用TLS证书;