您好,登錄后才能下訂單哦!
本篇文章為大家展示了使用ThinkPHP框架怎么實現微信支付功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
weixinpay.class代碼截圖
①. 驗證不嚴謹,損失教訓
補充時間:【2017-01-02】
情況描述
【我尊重你,但不認同你】
恰逢元旦期間,遭到微信支付被大牛攻破的情況,損失近 80k,好在公司并沒有追究,畢竟一直在趕時間,測試不全面(壓根沒測試人員),慶幸的的對方 24小時未收款,基本全部退還
問題集中在驗證不足的紅包發放上,不屬于我的編碼范圍,分析后,明白一點,盡全力不要使用前端的數據提交,需要進行后端的數據判斷,考慮盡量多的情況。
②. “total_fee” 參數報錯
補充時間:【2017-02-05】
情況描述
今天發現一種情況,如果打開微信支付密碼的界面后,未支付而從待付款進行再支付,會有時候報錯一個“total_fee” 參數報錯,找到一種解決方法,即將 “out_trade_no” 以時間戳來重新配置,個人猜測或許是因為一次支付未完成后因為某種原因限制再付款 …
代碼參考如下:
$total_fee = floatval($order_amount)*100; $order=array( 'body'=>'testMsg',// 商品描述(需要根據自己的業務修改) 'total_fee'=>$total_fee,// 訂單金額 以(分)為單位(需要根據自己的業務修改) 'out_trade_no'=>$out_trade_no.'M'.time(),// 訂單號(需要根據自己的業務修改) 'product_id'=>'1',// 商品id(需要根據自己的業務修改) 'trade_type'=>'JSAPI',// JSAPI公眾號支付 'openid'=>$openid// 獲取到的openid );
③. 批量支付問題
補充時間:【2017-02-08】
情況描述
今天在做批量支付時發現,會有 total_fee 報錯
個人最初簡單的想法是將所有待支付的批量訂單拼接為 state 參數傳入微信,然后再進入 notify() 方法中進行分離整理,此時發現微信有參數長度的限制,大概最多 50 個字符 ,不可以無限制的拼接
后來的解決方案是進行新訂單的創建,由此新訂單號去查詢關聯的其他批量訂單信息,并且已完成需求
④. 回調函數的注意
情況描述
注意該路徑必須要與配置文件中的回調路徑一致,此回調函數,是根據微信是否真正完成支付后的數據更新鏈接,一般在此處進行訂單狀態的修改
先前發現,因為微信服務的設計,會多次回調 notify() 以判斷是否真正的支付成功,而簡單的 update 操作是無法檢測的,為了同自己的平臺相關聯,同理需要進行狀態的判斷,否則不可避免的會多次執行 notify() 中的邏輯處理
注意:
1. 比如,我在此處異步執行的是將訂單號的支付狀態參數由 0 置為 1,判斷如果是已支付訂單,則不再執行后續更新邏輯.
2. 個人測試發現,此處 session 和 cookie 的設置都失效,僅做參考
⑤. D() 方法失效問題
補充時間:【2017-02-09】
情況描述
今天發現,當在微信完成支付后進行的回調中,針對于 ThinkPHP 框架里的 D() 方法是無法執行的,測試發現同樣的代碼不是這樣微信回調就可以執行,畢竟之前記得是沒有問題的
此時考慮的解決方法是使用 model 的實例化 new 方法進行曲線優化,發現可行…
⑤. 鬼知道是什么情況
補充時間:【2017-05-02】
情況描述
這兩天再次進行代碼的迭代,根據自己之前的印象繼續折騰微信支付,發現這可真真的是個坑,我認為剛開通微信支付的服務號很有可能不滿足某些代碼開發需求,配置完成的數據,半天都不能接收到正確的反饋
待到第二天再準備繼續攻克時發現,未動的代碼又實現了需求
舉個例子:
前一天回調的路徑放在 M 模塊下怎么都不執行,手賤參考以前的回調路徑放到 Home下就可以了,首先排除低級的個人代碼問題,因為第二天無聊又改回去了 M,竟然又好了…
補充一部分測試的代碼:
/** * 微信支付監聽接口 判斷是否完成了微信支付操作 */ public function notify(){ // ↓↓↓下面的file_put_contents是用來簡單查看異步發過來的數據 測試完可以刪除;↓↓↓ // 獲取xml /*$xml=file_get_contents('php://input', 'r'); //轉成php數組 禁止引用外部xml實體 libxml_disable_entity_loader(true); $data= json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)); file_put_contents('.notify.log', $data);*/ // ↑↑↑上面的file_put_contents是用來簡單查看異步發過來的數據 測試完可以刪除;↑↑↑ // 導入微信支付sdk Vendor('Weixinpay.Weixinpay'); $wxpay=new \Weixinpay(); $result = $wxpay->notify(); if ($result) { $out_trade_no = explode('M',$result['out_trade_no'])[0] ; $this->toUpdatePayInfo($out_trade_no); //TODO 進行頁面跳轉 } }
⑥. ThinkPHP 跨模塊調用方法失效問題
補充時間:【2017-05-03】
情況描述
有種情況的出現是,同樣的代碼在實際支付回調的函數中不執行,然而自己做了個測試路徑傳入固定訂單號發現執行順利,前提是所處環境完全一致(都在線上進行),就如同上次使用D()方法測試可以執行,放在實際的微信回調后就打死也不執行
而這次吸取了教訓,使用的 new model 實例化方法,因為其中的一個 model 類在初始化時調用了部分數據,結果微信支付回調時卡在實例化這行代碼上,雖然測試的代碼是沒問題的,自己也說不清楚,鬼知道到底是怎么回事
不過發現 A() 跨模塊方法還是可以用的,至少現在是可行的…
后期發現如下的類似方法也能執行
//TODO 獲取對應訂單的交易價 $cartPayController = new \M\Controller\CartpayController(); $order_amount = $cartPayController->wxPayOrder($out_trade_no,0);
thinkphp屬于一種免費的開發框架,能夠用于開發前端網頁,最早thinkphp是為了簡化開發而產生的,thinkphp同時也是遵循Apache2協議,最初是從Struts演變過來,也把國外一些好的框架模式進行利用,使用面向對象的開發結構,兼容了很多標簽庫等模式,它能夠更方便和快捷的開發和部署應用,當然不僅僅是企業級應用,任何php應用開發都可以從thinkphp的簡單、兼容和快速的特性中受益。
上述內容就是使用ThinkPHP框架怎么實現微信支付功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。