PHP 微信扫码支付模式二

1.微信配置就不多说了,看文档。

2.我用的是phalcon框架写的。。

    在微信支付控制器中引入微信的配置文件

require_once "wxpay/lib/WxPay.Data.php";
require_once "wxpay/example/WxPay.NativePay.php";
require_once "wxpay/lib/WxPay.Api.php";

    1)先创建本地订单(一般订单号为 date("YmdHis").rand(10000,99999))并存入订单数据表  支付状态为0不成功

    2)

    $notify = new \NativePay();
    $input = new \WxPayUnifiedOrder();
    $input->SetBody("测试充值");
    $input->SetAttach("测试充值");
    $input->SetOut_trade_no($out_trade_no);//$out_trade_no为本地生成的订单号
    $input->SetTotal_fee($balance);//$balance 为用户输入或选择的金额(别忘了*100)
    $input->SetTime_start(date("YmdHis"));
    $input->SetTime_expire(date("YmdHis", time() + 600));
    $input->SetNotify_url("http://www.xxx.com/recharge/wxNotify");
    $input->SetTrade_type("NATIVE");
    $input->SetProduct_id("123456789");
    $result = $notify->GetPayUrl($input);
    $url = $result["code_url"];//这个就是二维码地址
    //下面是 输入变量到模板
    $this->view->setVar('uid', $userId);
    $this->view->setVar('url', $url);
    $this->view->setVar('out_trade_no', $out_trade_no);
    $this->view->setVar('payment', $post['repayment']);

    3)二维码图片显示

    <img class="QRpay-code" src="http://www.xxx.com/wxpay/example/qrcode.php?data={{ url }}" />

    4)回调http://www.xxx.com/recharge/wxNotify

// 微信支付回调(如果不是在一个控制器里面不要忘了 引入微信文件)
    public function wxNotifyAction() {
        $postXml = $GLOBALS["HTTP_RAW_POST_DATA"];//微信回调返回值
        $payResu = new \WxPayResults();
        $postArr = $payResu->FromXml($postXml);//微信demo 自带的 xml->array
        //微信订单验证
        $input = new \WxPayOrderQuery();
        $input->SetTransaction_id($postArr['transaction_id']);
        $wxpayapi = new \WxPayApi();
        $result = $wxpayapi::orderQuery($input);
        if(array_key_exists("return_code", $result)&& array_key_exists("result_code", $result)&& $result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS")
        {
            //更新order_number充值订单
            $out_trade_no = $postArr['out_trade_no'];
            $json = json_encode($postArr);
            $order_num = OrderNum::findFirst("order_num = $out_trade_no");
            $order_num->callback_data = $json;       //把微信返回的数据以json的形式存储到callback_data字段
            $order_num->status = 1;
            if ($order_num->save() == false){
                return false;
            }
        }

    5)充值完成跳转功能,在二维码展示界面用ajax不断发送请求检查

        
<script>
	setInterval(function(){ call() }, 3000);
	
	function call(){
		$.ajax({
			url:"/order/notify",
			type:'post',
			data:{ 'uid':"{{ uid }}", 'out_trade_no':"{{out_trade_no}}", 'payment':"{{ payment }}" },
			success:function(data){
				if(data == 1){
    				window.location = "http://www.xxx.com/gamepay/success";
				}
			}
		});
	}
</script>

6)order/notify文件

// 微信支付成功处理
    public function notifyAction() {
        $this->view->disable();
        $post = $this->request->get();
        $this->request->get();
        $userId = $post['uid'];
        $payment = $post['payment'];
        $out_trade_no = $post['out_trade_no'];
        if($this->request->isAjax()){
            $order_number = OrderNum::findFirst("order_num = $out_trade_no");
            $call = $order_number->callback_data;
            $callBack = json_decode($call, true);
            $balance = $callBack['total_fee'];
            $order_status = $order_number->status;
            //判断
            if($out_trade_no == $callBack['out_trade_no'] && $order_status== '1'){
                $cm = new CurlManager();
                // 判断是否存在用户信息
                $userInfo = $cm->getUserInfo($userId);
                if (!$userInfo) {
                    //创建用户
                }
                // 充值
                if($userInfo){
                   //更新用户余额 
                    if($updateBlance){
                        echo 1;
                    }
                }
            }
        }
    }



    

猜你喜欢

转载自blog.csdn.net/qq_34752829/article/details/80985795