工作日志--微信支付整合到opensns(v2)下之支付成功后的回调notify方法
大家好,嘛上完整理发完了jsapi整合后开始研究支付成功后的回调方法。也是遇到了很多问题,最终得到结果是支付成功后能够回调notify方法进行逻辑处理,但是没有办法写入日志(提示是文件不可写,修改了服务器上文件夹权限777试过还是不行,暂时没想到解决办法),嘛,不过操作数据库,修改订单状态什么的都OK啦。好,下面上干货。
接着之前的工作,我们在PayController.class.php控制器里写入notify方法。
首先我们需要测试支付成功后有没有调用我们的notify方法,这里我选择在数据库中临时建一张test表,里面只有2个字段id和order_id,order_id是准备用来记录返回值中的transaction_id的。
在notify方法中编写如下代码:
$db = M("order_test"); $in["order_id"] = time();
$db->add($in);
在地址栏里打入notify方法的url访问,在数据库中就得test表中就可以看到有一条新数据插入。
ok,现在我们来支付1分钱测试看看数据库里是否有新数据插入。嘛结果并没有数据插入。
研究官方文档指导了jsapi 回调地址notify_url 是不允许带参数的。这怎么办呢?opensns默认的兼容模式访问地址,控制器和方法名是以参数形式拼接在url后面的。
看来要开启伪静态了。
开启伪静态的方法在opensns官方文档的建站教程中有,这里我们就说下自定义我们的notify方法的伪静态地址:(我的是apache环境下伪静态URLRewrite规则)
打开.htaccess文件找个位置加入以下代码:
RewriteRule ^/?pay/notify$ index.php?s=/mob/pay/notify [L]到后台系统里面开启网站伪静态。
在地址栏里输入 网站根目录/pay/notify 发现数据库test表中新增了一条数据。说明伪静态开启成功。
现在我们把jsapi方法中交易通知url重新设置成我们的伪静态地址:
$input->SetNotify_url("http://网站根目录/pay/notify"); //交易通知url然后再支付1分钱。 发现数据库test表中新增了一条数据。说明微信支付调用了我们的notify方法。
ok家下来就是在notify方法中写入具体的逻辑处理了。先给出代码:
public function notify(){ vendor("wxpay.lib.WxPayNotify"); //引入通知类库 vendor("wxpay.lib.log"); //引入日志 $notify = new WxPayNotify(); $notify->Handle(false); //最后为WxPayApi类下replyNotify方法 echo $xml $xml = $GLOBALS["HTTP_RAW_POST_DATA"]; //微信的回调数据 $base = new WxPayResults(); //实例化数据对象结果类 $data = $base->FromXml($xml); //将xml转为array if($base->CheckSign() == true){ if ($data["return_code"] == "FAIL") { //此处应该更新一下订单状态,商户自行增删操作 }elseif($data["result_code"] == "FAIL"){ //此处应该更新一下订单状态,商户自行增删操作 } else{ //此处应该更新一下订单状态,商户自行增删操作 $db = M("order_test"); $in["order_id"] = $data["transaction_id"]; $db->add($in); } } }这里并没有什么特别需要注意的地方,代码写好后我们再支付1分钱看看。按我们的逻辑支付后只有在验证签名成功,返回状态码成功,返回业务结果成功后,才会往数据库中写入微信订单号。嘛实际结果如图:
撒花!!
之后要编写怎样的逻辑处理就大家自己决定吧。
同样有什么问题欢迎添加企鹅2541497491交流讨论哦。
那么下次再会啦。
- 上一篇: 微信支付 —— 公众号支付代码详解
- 下一篇: JAVA中用Scanner输出二维数组