十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
這篇文章給大家分享的是有關(guān)PHP微信支付服務(wù)商開(kāi)發(fā)如何配置的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
淥口網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,淥口網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為淥口近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的淥口做網(wǎng)站的公司定做!
項(xiàng)目背景
不是什么大項(xiàng)目,使用微信服務(wù)商來(lái)管理多個(gè)子商戶,并使用服務(wù)商的接口替子商戶下單,服務(wù)商后臺(tái)才能接收到回調(diào)
使用場(chǎng)景是web掃碼支付
準(zhǔn)備
域名應(yīng)該要在服務(wù)商所歸屬的公眾號(hào)內(nèi)“網(wǎng)頁(yè)授權(quán)域名”設(shè)置好(不知此操作是否需要?)
在支付服務(wù)商后臺(tái)設(shè)置好回調(diào)地址(子商戶應(yīng)該是不用設(shè)置)
項(xiàng)目使用apache+php為后臺(tái)服務(wù),下載官方支付php demo(native)
我們直接先按照demo的目錄結(jié)構(gòu)來(lái)玩,直接把解壓的example和lib,2個(gè)目錄都到服務(wù)器根目錄
在example目錄下,創(chuàng)建cert目錄,進(jìn)服務(wù)商后臺(tái)-賬戶中心-api安全,下載證書(shū),放到這個(gè)目錄內(nèi)
在example目錄下,創(chuàng)建logs目錄,用于微信支付log類(lèi)寫(xiě)日志文件
由于微信支付相關(guān)都要使用https,所以查看訪問(wèn)日志在apache目錄下的logs目錄,ssl_request.txt文件,最下面,可以看到回調(diào)地址是否被請(qǐng)求
注意
官方demo有2個(gè)方式的掃碼支付,第一種方式已經(jīng)不提供,都使用第二種
官方的demo,會(huì)有不能顯示二維碼的bug,例子頁(yè)面是native.php
打印print_r($result); 這個(gè),會(huì)顯示錯(cuò)誤,主要是關(guān)于于curl的錯(cuò)誤,自行百度解決
配置
在WxPay.Config.Interface.php中的接口對(duì)象中增加一個(gè)公共方法public abstract function GetSubMchId(); //獲取子商戶id在WxPay.Config.php內(nèi)中,配置需要的參數(shù),自行百度,并且增加一個(gè)方法public function GetSubMchId(){ return '8888888888'; //返回子商戶號(hào) by vbyzc }在lib/WxPay.Api.php 內(nèi),在統(tǒng)一下單方法unifiedOrder中,下面的參數(shù)那段位置,增加$inputObj->SetSub_mch_id($config->GetSubMchId());//子商戶號(hào) by vbyzc在各個(gè)需要查詢訂單的的地方回調(diào),付款頁(yè)面實(shí)時(shí)檢測(cè)訂單支付狀態(tài)的請(qǐng)求頁(yè)面,都要使用此方法來(lái)設(shè)置子商戶id:
$input->SetSub_mch_id($config->GetSubMchId());注意,有的地方可能沒(méi)有$config對(duì)象,請(qǐng)引入WxPay.Config.php ,并初始化:$config = new WxPayConfig();
部分代碼
掃碼頁(yè)面:native.php
SetBody("test_body"); $input->SetAttach("test_Attach");//成功支付的回調(diào)里會(huì)返回這個(gè) $input->SetOut_trade_no($out_trade_no);//自定義訂單號(hào) $input->SetTotal_fee("1"); // 金額 $input->SetTime_start(date("YmdHis")); // $input->SetTime_expire(date("YmdHis", time() + 500)); $input->SetGoods_tag("test_goodsTag"); $input->SetNotify_url("https://service.ktfqs.com/example/wx_pay_callback.php"); $input->SetTrade_type("NATIVE"); $input->SetProduct_id("123456789"); //此id為二維碼中包含的商品ID,商戶自行定義。 $result = $notify->GetPayUrl($input); $url2 = $result["code_url"]; echo "這是返回:$url2"; print_r($result); ?>掃碼支付 掃描支付模式二
訂單編號(hào)
支付提示:WAITING...
查詢并返回訂單狀態(tài)頁(yè)面:orderqueryajax.php
SetOut_trade_no($out_trade_no); $input->SetSub_mch_id($config->GetSubMchId());//子商戶號(hào) by vbyzc $result = WxPayApi::orderQuery($config, $input); if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){//返回查詢結(jié)果 echo $result['trade_state']; }else{ echo "FAIL"; } } ?>
回調(diào)頁(yè):notify.php
SetTransaction_id($transaction_id); $input->SetSub_mch_id($config->GetSubMchId()); //設(shè)置子商戶號(hào) by vbyzc $result = WxPayApi::orderQuery($config, $input); Log::DEBUG("query:" . json_encode($result)); if(array_key_exists("return_code", $result) && array_key_exists("result_code", $result) && $result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS") { return true; } return false; } /** * * 回包前的回調(diào)方法 * 業(yè)務(wù)可以繼承該方法,打印日志方便定位 * @param string $xmlData 返回的xml參數(shù) * **/ public function LogAfterProcess($xmlData) { Log::DEBUG("call back, return xml:" . $xmlData); return; } //重寫(xiě)回調(diào)處理函數(shù) /** * @param WxPayNotifyResults $data 回調(diào)解釋出的參數(shù) * @param WxPayConfigInterface $config * @param string $msg 如果回調(diào)處理失敗,可以將錯(cuò)誤信息輸出到該方法 * @return true回調(diào)出來(lái)完成不需要繼續(xù)回調(diào),false回調(diào)處理未完成需要繼續(xù)回調(diào) */ public function NotifyProcess($objData, $config, &$msg) { $data = $objData->GetValues(); //TODO 1、進(jìn)行參數(shù)校驗(yàn) if(!array_key_exists("return_code", $data) ||(array_key_exists("return_code", $data) && $data['return_code'] != "SUCCESS")) { //TODO失敗,不是支付成功的通知 //如果有需要可以做失敗時(shí)候的一些清理處理,并且做一些監(jiān)控 $msg = "異常異常"; return false; } if(!array_key_exists("transaction_id", $data)){ $msg = "輸入?yún)?shù)不正確"; return false; } //TODO 2、進(jìn)行簽名驗(yàn)證 try { $checkResult = $objData->CheckSign($config); if($checkResult == false){ //簽名錯(cuò)誤 Log::ERROR("簽名錯(cuò)誤..."); return false; } } catch(Exception $e) { Log::ERROR(json_encode($e)); } //TODO 3、處理業(yè)務(wù)邏輯 Log::DEBUG("call back JSON:" . json_encode($data)); $notfiyOutput = array(); /* 返回的格式 { "appid": "wxa664cef2fee1b641", //調(diào)用接口提交的公眾賬號(hào)ID "attach": "test",//附加數(shù)據(jù),在查詢API和支付通知中原樣返回,該字段主要用于商戶攜帶訂單的自定義數(shù)據(jù) (使用SetAttach設(shè)置的) "bank_type": "LQT",//不知什么鬼東西 "cash_fee": "1",// 金額 "fee_type": "CNY",//貨幣類(lèi)型 "is_subscribe": "N",//不知什么鬼東西 "mch_id": "154133502151",// 商戶號(hào)(服務(wù)商) "nonce_str": "jw0bvddz275qyvxnpdfoaam55h4dw6uk",//微信返回的隨機(jī)字符串 "openid": "opnVE5pDPx2hWAoLLxyQW5KQt8GA",// 用戶openid(應(yīng)該是對(duì)于綁定的公從號(hào)) "out_trade_no": "vbyzc_for_jstx20190701010509",// 發(fā)起訂單時(shí)自定義訂單號(hào) "result_code": "SUCCESS",// 業(yè)務(wù)結(jié)果 "return_code": "SUCCESS",// 此字段是通信標(biāo)識(shí),非交易標(biāo)識(shí),交易是否成功需要查看result_code來(lái)判斷 "sign": "80E46C6CC50C25E6B5099AE4E03DA3C6FEFD5B172A99B03A56FAC4A9E11EC8F3",// "sub_mch_id": "154172463171",// 子商戶id "time_end": "20190701090530",// 交易結(jié)束時(shí)間?? "total_fee": "1",// 總金額 "trade_type": "NATIVE",// 支付方式 "transaction_id": "4200000301201907011310094985" // 微信支付單號(hào) } */ //查詢訂單,判斷訂單真實(shí)性 if(!$this->Queryorder($data["transaction_id"])){ $msg = "訂單查詢失敗"; Log::DEBUG("vbyzc run to here : order querySelect faild!!!!!" ); return false; } // 根據(jù)微信官方原代碼的業(yè)務(wù)流程,應(yīng)該是如下: // 支會(huì)成功后微信會(huì)不斷請(qǐng)求回調(diào),在上面的代碼 應(yīng)該是包函了回調(diào)回應(yīng)的代碼, // 如果成功回應(yīng),微信支付應(yīng)該就停止請(qǐng)求回調(diào),才能執(zhí)行下面的代碼 Log::DEBUG("vbyzc run to here :<<<<<<<<<<<<<>>>>>>>>>" ); return true; } } $config = new WxPayConfig(); Log::DEBUG("begin notify"); $notify = new PayNotifyCallBack(); $notify->Handle($config, false); ?>
感謝各位的閱讀!關(guān)于PHP微信支付服務(wù)商開(kāi)發(fā)如何配置就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!