關於微信支付JSAPI
阿新 • • 發佈:2019-01-01
首先,拿到微信相關賬號以後需要在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;
至此,支付的流程就跑通了,下面就是你的草原你的馬、你想咋耍就咋耍了。。。。。。。。