微信支付-微信公衆號支付,微信H5支付,微信APP支付,微信掃碼支付

在支付前,若是使用第三方MVC框架,則使用重寫模式,服務器也須要配置該項

if (!-e $request_filename){ rewrite ^/(.*)$ /index.php/$1 last; }

微信公衆號支付

1. 登陸 微信公衆平臺 ;javascript

2. 點擊左邊菜單裏面的微信支付查看相關商戶號,肯定該公衆號支付針對由哪一個商戶號進行收款;php

3. 登陸步驟2中的商戶平臺,點擊產品中心,開啓支付產品-公衆號支付(若是已開通能夠忽略該步驟);html

4. 繼續點擊商戶平臺->產品中心->開發配置,肯定商戶號是否和即將開發的公衆號支付一致。查看支付配置->公衆號支付java

添加相應的JSAPI受權目錄,添加規則具體參見:微信公衆號支付開發當前URL未註冊解決辦法web

 5. 回到公衆平臺,設置->公衆號設置->功能設置,添加JS接口安全域名和網頁受權域名;api

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>openId : {$openId}</h1>
    <button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" >當即支付</button>
    <script type="text/javascript">
        
        function callpay(){ if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } }else{ jsApiCall(); } } //調用微信JS api 支付
        function jsApiCall(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', <?php echo $jsApiParameters; ?>, function(res){ WeixinJSBridge.log(res.err_msg); alert(res.err_code+res.err_desc+res.err_msg); } ); } </script>

    <script type="text/javascript">
    //獲取共享地址
    function editAddress() { WeixinJSBridge.invoke( 'editAddress', <?php echo $editAddress; ?>, function(res){ var value1 = res.proviceFirstStageName; var value2 = res.addressCitySecondStageName; var value3 = res.addressCountiesThirdStageName; var value4 = res.addressDetailInfo; var tel = res.telNumber; alert(value1 + value2 + value3 + value4 + ":" + tel); } ); } window.onload = function(){ if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', editAddress, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', editAddress); document.attachEvent('onWeixinJSBridgeReady', editAddress); } }else{ editAddress(); } }; </script>
</body>
</html>

 微信H5支付

H5支付是指商戶在微信客戶端外的移動端網頁展現商品或服務,用戶在前述頁面確認使用微信支付時,商戶發起本服務呼起微信客戶端進行支付。瀏覽器

主要用於觸屏版的手機瀏覽器請求微信支付的場景。能夠方便的從外部瀏覽器喚起微信支付。安全

提醒:H5支付不建議在APP端使用,如須要在APP中使用微信支付,請接APP支付,文檔詳見微信支付開發文檔服務器


申請入口:登陸商戶平臺-->產品中心-->個人產品-->支付產品-->H5支付微信

https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_5

1. 登陸商戶平臺,查看開發配置->查看商戶號和H5支付域名。

2. 登陸開發平臺,肯定APPID,APPID必須是移動應用中所使用的APPID

更正:APPID 能夠是公衆號ID,注意是

3. 查看相關的商戶號、和支付KEY(用於簽名)。查看key步驟:商戶平臺->帳戶中心->帳戶設置->API安全->而後在該頁的「API密鑰」部分,點擊「設置密鑰」,能夠看到密鑰內容,該密鑰就是咱們須要的「支付Key」。本步操做只能在開發階段、產品沒有上線前操做,產品上線後切忌點擊「設置密鑰」,不然會影響線上的支付功能。

4. 調用統一下單便可獲得 mweb_url ,打開支付窗口,進行支付。統一下單接口請參考https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1

5. 能夠對 mweb_url 進行設置重定向頁面

// 判斷是否統一下單成功
        if($result['return_code'] != 'SUCCESS'){ throw new PayException("統一下單失敗:".$result['return_msg'], 320); } // 判斷是否存在重定向界面
        if(WxH5Config::REDIRECT_URL !== ""){ $result['mweb_url'] = $result['mweb_url']."&redirect_url=".urlencode(WxH5Config::REDIRECT_URL."?out_trade_no=".$inputObj['out_trade_no']); }

補充:redirect_url 必須是當前域名下指定的地址,好比發起支付H5域名是domain,重定向頁面地址最好是domain,不然未配置的狀況下會報商家存在未配置的參數,請聯繫商家解決

6. 支付成功或者取消或者失敗都會重定向 redirect_url 地址,支付成功會異步執行通知notify_url。

微信APP支付

1. 登陸開發平臺,查看APPID;

2. 登陸商戶平臺,查看對應的商戶號;

3. 密匙KEY同微信H5支付步驟3;

4. 而後調用APP統一下單

注意:

1. 解決微信App支付服務端,App上提示「商戶支付下單id非法」

統一下單接口,返回的字段名是「prepay_id」

調起支付接口,傳入的字段名是「prepayid」

坑爹的微信支付!!

同時呼籲你們必定要養成命名規範。。。

2.關於微信APP支付,提示支付驗證簽名失敗

最近作微信APP支付,在「統一下單」里加籤沒有問題,調用成功,可是在 「調起支付」後卻提示  支付驗證簽名失敗。

先說一下請求的參數,參數一共有七個:

prepayid(統一下單裏返回的標識符),

partnerid(商戶號),

appid,

package(微信要求必須有,內容是「Sign=WXPay」),

 noncestr(隨機數,不適用微信返回的,是從新生成一個,注意統一下單裏的參數是nonce_str),

timestamp(時間戳,十位,注意統一下單裏的時間是完整的時間,這裏是時間戳),

sign(簽名,將上述字段從新簽名,而不是用統一下單返回的sign)。

這個問題折磨了我一上午,覺得統一下單裏簽名沒問題,那麼調起支付就不會在加簽上出錯,最後用微信的簽名生成工具對比了一下簽名結果發現 程序生成的簽名與官網生成的不同,而後把簽名過程輸出了下,發現 package 這裏出現了問題。

Sign=WXPay,我在加簽裏對內容進行了utf-8編碼,而恰巧,一不當心 「=」 也參與了編碼,因而 就變成了 Sign%3DWXPay,而後 錯誤的package進行了錯誤的加簽,致使簽名出錯。

解決方案:在加簽過程裏修改,若是map匹配到 package,那麼map的值不參與編碼。官方簽名校驗工具地址:https://pay.weixin.qq.com/wiki/tools/signverify/。

(吐槽一句,微信支付的文檔真是一團糟,要啥啥沒有,找啥找不到,並且還出現了 多個標準。固然,也多是我水平太差。。)

 

5. 支付完成,等待通知回調。

總結:其實微信支付三種形式 JSAPI 、 MWEB 、 APP 大同小異,基本的步驟都是根據統一下單,而後進行調取微信支付(在微信支付時,JSAPI會直接回調到當前頁面(支付成功失敗取消),MWEB須要指定重定向地址(支付成功失敗取消),APP就須要SDK回調了(支付成功失敗取消),這三種形式都會有通知回調來處理(支付成功)邏輯)。將坑都寫出來,但願能告誡初作微信支付者不要踩啊。。。

 

補充:微信掃碼支付

 

公衆號支付是手機端的微信公衆號H5頁面支付,這種支付方式必須是在微信內置瀏覽器發起。

 

掃碼支付分爲模式一和模式二,模式一主要爲線下服務,該模式是先掃碼,再生成訂單,商戶先爲本身的商品生成二維碼鏈接,而後用戶掃碼以後決定是否購買,二維碼無過時時間,好比自動售賣機大多采用這種模式;模式二主要爲線上電商服務,用戶選擇商品後生成訂單,根據訂單生成二維碼,而後支付,該二維碼爲臨時二維碼。
申請入口:登陸商戶平臺-->產品中心-->個人產品-->支付產品-->掃碼支付

設置掃碼支付回調連接:登陸商戶平臺-->產品中心-->開發配置

採用模式二:

$param->appid = $this->wxConfig[$business_code]['APP_ID']; $param->mch_id = $this->wxConfig[$business_code]['MCH_ID']; $param->nonce_str = $this->getNonceStr(); $param->body = "xxx"; $param->notify_url = $this->wxConfig[$business_code]['notify_url']; $param->trade_type = 'NATIVE'; $param->sign = $this->MakeSign($param->getParam()); $xml = $this->ToXml($param->getParam()); $response = $this->postXmlCurl($xml,WxConf::UNIFIEDOR_ORDER_URL,false,6); return $this->FromXml($response);

統一下單後會生成一個 code_url : weixin://wxpay/bizpayurl?pr=DBJQsA6

利用第三方二維碼工具生成二維碼

最好掃碼進行支付回調OK

相關文章
相關標籤/搜索