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


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

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

微信公眾號支付

1. 登錄 微信公眾平台 ;

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

3. 登錄步驟2中的商戶平台,點擊產品中心,開啟支付產品-公眾號支付(如果已開通可以忽略該步驟);

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

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

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

<!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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM