微信h5h5微信支付接口开发为什么这么难找

H5上实现微信支付
今天进行微信支付开发碰到如下几个问题:
1、微信appid,签名key值,商户号
2、统一下单接口已调用,微信端成功返回prepay_id
1、支付签名&
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
签名的参数有appId, timeStamp, nonceStr, package,
signType(支付使用MD5)
paySign为以上参数进行md5的签名结果。
签名结果可用下面链接进行验证:
https://pay./wiki/doc/api/jsapi.php?chapter=20_1
2、wx.chooseWXPay:fail
确定签名没问题后,页面仍报wx.chooseWXPay:fail错误。
登录微信公众号平台,配置微信支付——开发配置
测试授权目录:支付测试使用,配置URL为h5支付页面的上级目录,如:/project/payDir/
这里需要配置测试白名单,只有白名单的人才能进行支付,其他人调用支付界面会报错。
支付授权目录:
参考链接:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。php微信支付若干问题记录
  1.缺少参数$key0$
    此问题的可能性有几种,大致有1.timeStamp这个参数应该是string类型,默认time是int
                  2.确实是参数缺少 &比如:prepay_id获取到的为空,这里有具体原因,可以查看post过去的xml 与返回的xml 我这里是
                  
&xml&&return_code&&![CDATA[SUCCESS]]&&/return_code&
&return_msg&&![CDATA[OK]]&&/return_msg&
&appid&&![CDATA[XXXXX]]&&/appid&
&mch_id&&![CDATA[XXXXXX]]&&/mch_id&
&nonce_str&&![CDATA[TSg5BOGtPlX8UfeR]]&&/nonce_str&
&sign&&![CDATA[33D5D95FE73EC7049C09]]&&/sign&
&result_code&&![CDATA[FAIL]]&&/result_code&
&err_code&&![CDATA[OUT_TRADE_NO_USED]]&&/err_code&
&err_code_des&&![CDATA[商户订单号重复]]&&/err_code_des&
                在描述里已经很清楚商户订单号重复,修改过后可以正常支付
  2.授权目录问题
    要对支付发起的php页面进行授权,如果没有会提示 未授权,这时在微信公众平台里添加就可以
  3.商户号和公众号没有关联关系
    此处说明公众号与商户号里面有错误
  4.mch_id参数格式错误
    商户号填写错误
  5.订单状态错误
    可能存在已经退款的订单再次提交申请 会有此错误返回,完全根据return_code="SUCCESS"
    这个可能会有此问题,如果存在此情况 会在xml里面的&result_code中体现
  6.PARAM_ERROR
    这个是微信红包接口里的错误,属于参数没有填写对的问题
  7.NOTENOUGH
   & 这个 这个 没钱辣 公众平台充值即可  
阅读(...) 评论()关于微信H5公众号支付我们踩过的坑(get_brand_wcpay_request:fail)(防止更多人踩坑) - 博客频道 - CSDN.NET
For you的博客
完全会写业务的phper,求大神带,学习架构知识,诚心学。。。
分类:H5支付phpjavascript
最近公司有了一个新的需求,学生在购买课时的时候,需要让家长或者朋友代付。这样的话我首先想到的就是微信的H5支付(微信内置浏览器调用支付模块)。当时想用这个支付的原因因为是前端代码十分简单。。
然而恰恰是因为自己选择了这个方法,让自己连续两天陷入了困境。
下面是正文跟代码截图
首先咱们先来看下H5的支付文档说明
咱们新手或者写过微信支付的童鞋都不难看懂 其实十分简单,需要的入参跟说明一目了然。但是H5支付的大前提很重要,就是需要用户的openid,不然你在调用微信统一下单的时候(其中交易类型:trade_type = JSAPI)它们会返回你说确实openid这个参数。问题是这个参数我们从哪来呢?
我直接搜一些资料贴给大家;
据我所知目前有两个方式:
1.微信OAuth网页授权。服务号(订阅号不行)可以在公众号后台开通微信OAuth网页授权,用户在网页中进行授权操作时你会得到用户的openid
2.接入服务器。微信允许接入服务器进行开发,配置好接入服务器(参考微信的开发文档)后,用户发给公众号的消息全部会以一个xml表单的形式被转发到你的服务器上。
我使用的是第一种方式,其实很简单,大家可以参考微信的demo
其中参考example/WxPay.JsApiPay.php里面的GetOpenid方法。
这样获取到openid再去调用统一下单接口就没问题,如果再有其他问题,可以打日志看微信返回错误,一般这个地方的返回错误比较明显,很容易查到原因。最坑也是最泪崩的是以后的错误类型。
我们看到我们调用统一接口成功之后会返现微信返回的结果里面有这些东西
从结果里面我们不难看出调用微信支付的demo里面要的几个参数我们全部有了,包括sign签名(这是一个坑)。这样的话 我们只需要把这些参数返回给客户端直接组合数据应该就能成功了。
此时我们把数据返回给客户端 ,客户端组合数据如下
我们测试之后发现。微信返回的是支付签名验证失败,一般通用错误类型会返回get_brand_wcpay_request:fail。这个时候 我又去看了一下文档,那个时间戳是十位,js这种方法是13位精确到毫秒的,于是我切割字符串,获得十位时间戳,这个时候再去测试仍然跟上次错误一样。于是我慢慢的冷静下来。开始在网上疯狂查资料。查找问题在哪?网上的答案一般是支付授权目录的问题,其实这个我早就设置好了的。没有问题的。于是我又一遍的啃起了他的官方文档,结合他们的demo重新理了一遍思路。原来文档里面几个参数中只有package这个参数会用统一下单返回的数据,真是中国文化博大精深啊,玩文字游戏啊。
于是我猜想那么统一接口返回的sign也不能用楼。难不成所谓的sign是统一下单返回的结果重新用md5去生成么?
我只能去测试验证我的结论了。不多说,贴代码
这组代码是我从统一订单返回结果之后 按照文档的说明,(大小写别写错),重新生成了sign,然后返回客户端,包括时间戳也返回。这样的话再去测试,它不会再报get_brand_wcpay_request:fail。它会给我报了另外一个错误,提示我说当前页面为注册,同时弹了url出来(这一步,如果童鞋在公众号设置。微信支付-》支付授权目录)填写过的话,应该就没其他问题了。可以忽略。
基本上H5内置浏览器调用微信支付模块就是这些东西。主要的坑在于签名。微信返回的错误类型是最坑爹的,全是通用的,根本不能快速定位。
—————-我走过最多的坑位就是微信的套路
ps:如果还有问题的话,可以留言咨询我。
TIP:大家做支付的时候,不管是微信 还是支付宝 或者其他,有了报错,大家可以同事在ios跟安卓上面都看看,因为同一个错误在不同系统上面呈现的形式不一样,也许这一个不一样就会解除你好几天的疑惑。
如果你觉得对你有用,那就请点个赞,写个评论吧。
young_phper
排名:千里之外
(5)(5)(1)(2)(2)(2)(4)(2)(1)(1)2017年1月 总版技术专家分月排行榜第三
2017年2月 PHP大版内专家分月排行榜第一2017年1月 PHP大版内专家分月排行榜第一
2011年11月 PHP大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 支付宝h5支付接口 的文章

 

随机推荐