100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > php 微信支付md5签名 微信支付V3支付签名无效解决方案

php 微信支付md5签名 微信支付V3支付签名无效解决方案

时间:2019-02-10 11:33:09

相关推荐

php 微信支付md5签名 微信支付V3支付签名无效解决方案

业务需要一个在微信上能付款的功能,于是乎想到了最普遍的支付宝,坑爹的是T与A是水火不容啊,默默的还是接微信支付吧,没想到从此掉进了连环坑……

网上写微信支付接口的还是很多,PHP官方有(鄙视源码作者,连参数对应都错了,能跑通才怪),NET版 微信支付--入门篇 这篇算是比较全的,java版。

PHP的只能参考,终究还是先按NET版的还创建项目,不过文章里面也没具体写到如何前后台交互(偶用的MVC),对于初次接触的人来说只能问题来一个解决一个。

至于怎么从0开发就不用详细说明了,参考这位仁兄的 微信支付--入门篇 ,微信支付V2版网上也有Demo,但V3与V2相差太大,以此就新版V3 碰到的问题来说明解决方法。

基础问题先排除:

确保 商户功能 审核通过,会有官方邮件

支付授权目录(注意看文档,大小写关系很大 点击支付按钮,提示“access_denied” 网上有很多关于此问题的解决)

点击支付按钮,提示“access_not_allow” 需要将测试人的微信帐号加入白名单

【在开发调试阶段,测试链接需要在公众号内点击打开 白名单用户在公众号内向公众号发一条消息,消息内容即为测试链接,然后点击打开】文档中写得很清楚,但中招的人还是不计其数(偶也中了……)。

【参数大小写敏感】md5 运算后,字符串的字符要转换为大写,注意是MD5运算模块。

基本问题排除后,出问题最多的就是 利用JSAPI 支付,提示“该公众号支付签名无效,无法发起该笔交易”,此问题搞了2天多,网上到处搜索,不停的对比文档,无耐欲哭无泪啊,“不要用wifi和用流量才不报错”的答案都有(没遇到过)

具体的问题与 坑人的微信新版支付(V3.3.6) 中说的一样(求助被无视了……),能得到预支付 ID:prepay_id,但点击支付就是一直 提示“该公众号支付签名无效,无法发起该笔交易”,又不能本地调试,只能发布后写日志。

根据网上说的调整参数位置、没办法又看文档,那问题出在哪呢?

签名无效,说明出在第二次签名,此次要将参数提交给前台用js来传给微信来校验,查看MD5操作,

prepay_id的获得需传参:

其中MD5签名方法

///

///创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名

///

///参数名

///参数值

///key和value通常用于填充最后一组参数

///

publicvirtualstringCreateMd5Sign(stringkey,stringvalue)

{

StringBuildersb=newStringBuilder();

ArrayListakeys=newArrayList(Parameters.Keys);

akeys.Sort();

foreach(stringkinakeys)

{

stringv=(string)Parameters[k];

if(null!=v&&"".CompareTo(v)!=0

&&"sign".CompareTo(k)!=0&&"key".CompareTo(k)!=0)

{

sb.Append(k+"="+v+"&");

}

}

sb.Append(key+"="+value);

stringsign=MD5Util.GetMD5(sb.ToString(),GetCharset()).ToUpper();

returnsign;

}

1.package改为prepay_id=u802345jgfjsdfgsdXXX 的格式(html页也是此格式)

2.加入signType为MD5加密参数(有人说不加是不对的)

3.两次MD5加密都要按文档的方法 key要放在最后再加密

4.MD5加密对大小写加密的结果是不一样的,检查 appId与appid、timeStamp与timestamp加密后是不一样的,确保HTML与后台加密的参数一模一样,是一模一样哦!!(坑中坑,没想到微信支付竟然对大小写敏感到如此地步),注意第一次加密参数都是小写

5.参数个数5个

6.body参数过长

7.加入openid

我们的问题大多出现在4,按上面顺序解决后终于看到了支付窗口!!!!

此文献给还在深坑中的小伙伴们……

不说了,说多了都是泪……

稍后附上源码。。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。