牛骨文教育服务平台(让学习变的简单)
博文笔记

工作日志--微信支付整合到opensns(v2)下之支付成功后的回调notify方法

创建时间:2016-08-19 投稿人: 浏览次数:3808

大家好,嘛上完整理发完了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交流讨论哦。

那么下次再会啦。



声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。