1. 程式人生 > >關於微信支付JSAPI

關於微信支付JSAPI

首先,拿到微信相關賬號以後需要在WxPay.pub.config.php裡配置一下

<?php
/**
* 	配置賬號資訊
*/

class WxPayConf_pub
{
	//=======【基本資訊設定】=====================================
	//微信公眾號身份的唯一標識。稽核通過後,在微信傳送的郵件中檢視
	const APPID = 'wx2018jiaowoyuyu00';
	//受理商ID,身份標識
	const MCHID = '1234567890';
	//商戶支付金鑰Key。稽核通過後,在微信傳送的郵件中檢視
	const KEY = 'jiaowoyuyu0jiaowoyuyu0jiaowoyuyu';
	//JSAPI介面中獲取openid,稽核後在公眾平臺開啟開發模式後可檢視
	const APPSECRET = 'jiaowoyuyu0jiaowoyuyu0jiaowoyuyu';
	const JS_API_CALL_URL = 'http://$_SERVER[HTTP_HOST]/index.php/Home/Wxpay/index' ;
	
	
	
	const SSLCERT_PATH = '{$path}/cacert/apiclient_cert.pem';
	const SSLKEY_PATH = '{$path}/cacert/apiclient_key.pem';

	const NOTIFY_URL = 'http://$_SERVER[HTTP_HOST]/index.php/Home/Wxpay/notify';
	const CURL_TIMEOUT = 60;
}

	
?>

然後就是Wxpay控制器的開發,這裡有幾點需要注意下:

1.獲取openid這裡,openid是通過code獲取到的,它的流程大致是這樣的:首先判斷是否從連結中獲取到了code值,第一次進來肯定是沒有值得,也就是說它會走if裡的流程,觸發微信返回code碼,然後再走else裡的流程獲取openID。

Vendor("Pay.Wxpay.WxPayPubHelper");
			$jsApi = new \JsApi_pub();
			if (!isset( $this->get['code'])){
						
		$url1 =  \WxPayConf_pub::JS_API_CALL_URL;
						
			$jsApi->createOauthUrlForCode($url1);
			Header("Location: $url"); 
						
			}else{
						//獲取code碼,以獲取openid
						
						$jsApi->setCode($this->get['code']);
						$openid = $jsApi->getOpenId();
			}

2.統一下單裡總金額這裡是按分計算的,如果想設定一分錢的話要麼就是1要麼就是0.01*100,如果不注意的話,小氣的人是要吃大虧的,測試階段分分鐘虐死你。會導致獲取不到prepayID和xml格式錯誤。

這些完成後就可以使用jsapi調起支付了

在跑通流程的過程中可能會遇到url未註冊的突發狀況,不要著急,微信的授權地址一般會指向支付頁面url的上一級,引數不算。不過要記得加www哦!

//使用統一支付介面
	$unifiedOrder = new \UnifiedOrder_pub();
	
	//設定統一支付介面引數
	//設定必填引數
	//appid已填,商戶無需重複填寫
	//mch_id已填,商戶無需重複填寫
	//noncestr已填,商戶無需重複填寫
	//spbill_create_ip已填,商戶無需重複填寫
	//sign已填,商戶無需重複填寫
	$unifiedOrder->setParameter("openid","$openid");//商品描述
	$unifiedOrder->setParameter("body","貢獻一分錢");//商品描述
	//自定義訂單號,此處僅作舉例
	$timeStamp = time();
	$out_trade_no = WxPayConf_pub::APPID."$timeStamp";
	$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商戶訂單號 
	$unifiedOrder->setParameter("total_fee","1");//總金額
	$unifiedOrder->setParameter("notify_url",\WxPayConf_pub::NOTIFY_URL);//通知地址 
	$unifiedOrder->setParameter("trade_type","JSAPI");//交易型別
	//非必填引數,商戶可根據實際情況選填
	//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號  
	//$unifiedOrder->setParameter("device_info","XXXX");//裝置號 
	//$unifiedOrder->setParameter("attach","XXXX");//附加資料 
	//$unifiedOrder->setParameter("time_start","XXXX");//交易起始時間
	//$unifiedOrder->setParameter("time_expire","XXXX");//交易結束時間 
	//$unifiedOrder->setParameter("goods_tag","XXXX");//商品標記 
	//$unifiedOrder->setParameter("openid","XXXX");//使用者標識
	//$unifiedOrder->setParameter("product_id","XXXX");//商品ID

	$prepay_id = $unifiedOrder->getPrepayId();
	//=========步驟3:使用jsapi調起支付============
	$jsApi->setPrepayId($prepay_id);

	$jsApiParameters = $jsApi->getParameters();
	//echo $jsApiParameters;

至此,支付的流程就跑通了,下面就是你的草原你的馬、你想咋耍就咋耍了。。。。。。。。