💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
基本问题排除后,出问题最多的就是 利用JSAPI 支付,提示“该公众号支付签名无效,无法发起该笔交易”,此问题搞了2天多,网上到处搜索,不停的对比文档,无耐欲哭无泪啊,“不要用wifi和用流量才不报错”的答案都有(没遇到过) 基于园友提出的另一个问题”测试目录改为http://mall.xxx.com/后,网页支付时直接提示get_brand_wcpay_request:fail_invalid appid 。使用了其他的目录如http://store.xxx.com/ 也毫无问题。估计微信内部把含mall的支付都给屏蔽了。 “ 此问题还没亲自验证,不过在微信中还是请不要用关于阿里有关的域名,否则都不知道怎么坑死的。 ![](https://box.kancloud.cn/2016-07-22_57919aa0bbd84.png) 具体的问题与 坑人的微信新版支付(V3.3.6) 中说的一样,能得到预支付 ID:prepay_id,但点击支付就是一直 提示“该公众号支付签名无效,无法发起该笔交易”,又不能本地调试,只能发布后写日志。 根据网上说的调整参数位置、没办法又看文档,那问题出在哪呢? 签名无效,说明出在第二次签名,此次要将参数提交给前台用js来传给微信来校验,查看MD5操作, prepay_id的获得需传参: ![](https://box.kancloud.cn/2016-07-22_57919aa0d2a2b.png) 其中MD5签名方法 ```sh /// <summary> /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// </summary> /// <param name="key">参数名</param> /// <param name="value">参数值</param> /// key和value通常用于填充最后一组参数 /// <returns></returns> public virtual string CreateMd5Sign(string key, string value) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = (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); string sign = MD5Util.GetMD5(sb.ToString(), GetCharset()).ToUpper(); return sign; } ``` 1.package改为prepay_id=u802345jgfjsdfgsdXXX 的格式(html页也是此格式) ![](https://box.kancloud.cn/2016-07-22_57919aa0edfbc.png) 2.加入signType为MD5加密参数(有人说不加是不对的) 3.两次MD5加密都要按文档的方法 key要放在最后再加密 4.MD5加密对大小写加密的结果是不一样的,检查 appId与appid、timeStamp与timestamp加密后是不一样的,确保HTML与后台加密的参数一模一样,是一模一样哦!!(坑中坑,没想到微信支付竟然对大小写敏感到如此地步),注意第一次加密参数都是小写 ![](https://box.kancloud.cn/2016-07-22_57919aa10e249.png) ![](https://box.kancloud.cn/2016-07-22_57919aa152ea7.png) 5.参数个数5个 6.body参数过长 ![](https://box.kancloud.cn/2016-07-22_57919aa16ad4c.png) 7.加入openid ![](https://box.kancloud.cn/2016-07-22_57919aa17b475.png) 我们的问题大多出现在4,按上面顺序解决后终于看到了支付窗口!!!! 此文献给还在深坑中的小伙伴们…… 不说了,说多了都是泪…… 这里抽出来的是net版本的,主要解决前期页面支付问题,只是个基本的demo,没有回调页面。有园友也提出了demo中的不足,建议先跑通这个demo,然后在此基础上补充不严谨的支付逻辑,毕竟是涉及到money的问题,毕竟也只是个demo,不能不思考就完全照般。 这里抽出来的是net版本的,主要解决前期页面支付问题,只是个基本的demo,没有回调页面。有园友也提出了demo中的不足,建议先跑通这个demo,然后在此基础上补充不严谨的支付逻辑,毕竟是涉及到money的问题,毕竟也只是个demo,不能不思考就完全照般。