微信支付JSAPI开发——官方Demo的错误、自定义参数传递

来源:互联网 发布:java和net就业前景 编辑:程序博客网 时间:2024/06/06 09:39

可能有些地方说的不是很好,不理解的可以私聊我或者在评论区发表,我基本每天都会抽出时间逛逛CSDN的。求不喷就行T_T。


之前接了一个项目,开发微信端的一个商城。在一开始开发过程中,并没有遇到什么问题。

随着开发进程的深入,到了支付这步时,客户需要接入微信支付。

以下是我遇到过的问题以及我的解决方法。

一、使用官方的Demo以及出现的错误:

因为是第一次做微信支付,就去官方开发文档查了下。

  1. 第一步确认类型是JSAPI的,由于目前是微信支付V3版本,并没有paysignKey这个参数(这时V2里面官方提供的一个参数)。
  2. 然后根据官方给的文档,我找客户要了所需要的几个参数(在申请微信支付成功后微信给你发送的邮件里)【APPID、MCHID、KEY、APPSECRET】这里介绍下这四个参数:APPID和APPSECRET这两个可以在登录微信公众平台后在基本配置里面看见。重点是MCHID(受理商ID)和KEY(商户支付密钥),这两个在那个邮件里。
  3. 下载官方给的Demo,不过官方给的Demo里有几个错(开发过程中遇到过,百度下发现好多喷微信的T_T),其中错误是在WxPayPubHelper.php文件里,里面curl部分那个设置的超时错误了,正确应该是【curl_setopt($ch, CURLOPT_TIMEOUT, $second);】。文件里有多处用到,最好每个都看下T_T。
  4. 下载好后,把参数写入配置文件里【WxPay.pub.config.php】
  5. 那个证书其实是不需要的(对于JSAPI)。

可以移步下面的官方链接看看它的参数等(这里面说的很详细):

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1


二、PHP自定义传递参数:

当我调通微信支付时,看见支付那个页面时候很兴奋,但是兴奋之后我发现有问题了,始终是一分钱(其实对于用户来说很爽O(∩_∩)O,但是客户会杀了我的T_T)。所以我就得改啊。

可是我发现GET过来的数据在获取openid那一步过后消失了(打印很多次发现的T_T)。WTF!竟然会出现这种情况,真是第一次遇见。

其实这种情况很好理解,因为获取openid那一步页面跳转了,之前GET的数据也就消失了。其实不止GET的,POST、REQUEST等到的数据都会消失。一个大写的NULL!

发现这个问题后,试了很多办法,都行不通。这个时候已经快疯了T_T。

多次尝试无果后,我再次回头看看程序,发现那个重定向的URL里面有个STATE,官方给的解释是【重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节】,我就想是不是可以把GET到的数据整理后替换这个STATE,然后不就在这个URL上了嘛,可以再次GET到,所以我就试了下,打印出来果然可以(可以想象当时的兴奋),不过又兴奋之后又发现问题T_T,可以把参数分开???

因为之前是把所需参数放在一个数组后转换成json格式的字符串的,解析后发现是NULL,这个时候我去把获取的值不解析直接打印出来看看,发现有 \ 这个鬼。怪不得解析后没有东西了,这个时候的值根本就不是JSON格式的字符串,所以我就再次把 \ 去掉了,再次调试后果然可以了。

下面是代码:

if (!isset($_GET['code'])){//触发微信返回code码$url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);$state = json_encode(array(               "out_trade_no" => "$out_trade_no",                "total_fee" => "$price"        ));        $url = str_replace("STATE", $state, $url);Header("Location: $url"); } else {       //获取code码,以获取openid        $code = $_GET['code'];        $jsApi->setCode($code);$openid = $jsApi->getOpenId();$state = $_GET['state'];$state = str_replace("\\", "", $state);$param = json_decode($state, true);$out_trade_no = $param['out_trade_no'];$price = $param['total_fee'];}

到此为止,微信开发遇到的坑都解决了,后续的事情就靠各家的要求去处理了T_T。

1 0
原创粉丝点击