1. 程式人生 > >phpcms 微信支付流程

phpcms 微信支付流程

公司專案版本迭代,有了新需求,之前的微信支付是點選按鈕,直接生成訂單的同時請求微信授權,然後重定向在連結裡就有了code從而可以獲取使用者openid。

新需求是 下訂單的時候新增讓使用者選擇收貨地址,並且支付完成以後,訂單資訊包含使用者的收貨資訊。

上一版本的支付是點選購買直接生成訂單號,然後付款。這個流程中,使用者不用填寫任何資訊。新版本需要新增使用者收貨地址,則變更為 點選購買->填寫相關資訊->提交訂單->生成訂單號->付款。

1.點選購買,引入模版,顯示商品相關資訊。

2.提交訂單,這時使用者的地址已經選擇好,提交的資訊應該包含商品資訊,構造好的微信支付引數,使用者資訊,訂單資訊,這一步進行微信授權獲取使用者的openid為下一步支付做準備。

3.提交訂單後引入支付模版,使用者點選支付,呼叫js進行支付,支付完成後,會呼叫支付回撥地址。

4.支付後的回撥地址要在微信公眾平臺配置。

這是第一次寫微信支付,記錄一下思路。

遇到的主要問題就是 請求微信授權獲取openid會重定向,重定向會丟失post的內容,重定向的url拼接的也不對,不過後來都解決了。

重定向拼接的url不對的問題在於 WxPay.JsApiPay.php 中

/**
	 * 
	 * 通過跳轉獲取使用者的openid,跳轉流程如下:
	 * 1、設定自己需要調回的url及其其他引數,跳轉到微信伺服器https://open.weixin.qq.com/connect/oauth2/authorize
	 * 2、微信服務處理完成之後會跳轉回使用者redirect_uri地址,此時會帶上一些引數,如:code
	 * 
	 * @return 使用者的openid
	 */
	public function GetOpenid()
	{
		//通過code獲得openid
		if (!isset($_GET['code'])){
			//觸發微信返回code碼
			$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']);
			
			$url = $this->__CreateOauthUrlForCode($baseUrl);
			Header("Location: $url");
			exit();
		} else {
			//獲取code碼,以獲取openid
		    $code = $_GET['code'];
			$openid = $this->getOpenidFromMp($code);
			return $openid;
		}
	}

去掉上述程式碼中$baseurl的最後一個 $_SERVER['QUERY_STRING']   即可