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;
                    }
                }
            }
        }
    }



    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章