php微信生成签名_微信支付PHP开发教程二签名算法

重要:本文最后更新于2019-05-27 08:30:11,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗。

当你申请接入微信支付的请求被通过后,你就拥有了使用微信收付款的能力。在整个微信支付的流程中,必不可少的一项就是签名,微信服务器通过你发送的签名判断你是不是合法用户,同时也取得了交易对象。那么微信支付的签名算法是怎样的逻辑呢?我们一起来看看微信支付的说明文档,学习下签名算法的构建。声明下,每种语言的函数方法可能不一样,但逻辑都是通用的,我这里使用的是PHP。

签名算法说明文档地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_3

签名校验工具地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=20_1

我们可以使用官方的签名校验工具生成签名,把它与与我们自己写代码生成的签名进行对比判断,看看算法是否正确。

d2fa17270d1684a7de95584a9385eec3.png

微信支付

微信支付签名算法逻辑

第一步

设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA

注意事项:

参数名ASCII码从小到大排序(字典序);

如果参数的值为空不参与签名;

参数名区分大小写;

验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。

微信接口可能增加字段,验证签名时必须支持增加的扩展字段

第二步

在第一步得到的字符串上拼接商户key,拼接方式与第一步一样,使用URL键值对的格式(即key1=value1&key2=value2…)

第三步

将第二步得到的字符串B进行MD5加密(加密方式参考说明文档中微信支付支持的加密)

第四步

将第三步得到的字符串C转换成大写字母,得到最后签名值。

PHP微信支付签名源码

public function GetSign($params,$key){

//升序

ksort($params);

//数组转成URL键值对并拼接商户key

$str=urldecode( http_build_query($params)."&key=".$key);

//MD5加密并转成大写

return strtoupper(md5($str));

}

使用方式:

$Sign=GetSign([

'appid'=>'appid',

'mch_id'=>'商户ID',

'nonce_str'=>'随机字符串不超过32位'

]);

var_dump($Sign);

为了检验我们程序生成的签名值是否与微信支付官方工具生成的签名值是否一致,我们将appid、商户ID、随机字符串复制到官方签名工具中去,生成签名结果如下:

000a5fb98625d03398c1834553b6d053.png

微信支付PHP开发教程二签名算法

使用浏览器的查找功能,成功查找到我们生成的签名值,说明我们的php微信支付签名算法正确,可以进行下一步开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值