ThinkPHP微信掃碼支付介面

来源:http://www.cnblogs.com/hongxinlaoking/archive/2016/03/28/5330006.html
-Advertisement-
Play Games

最近折騰微信掃碼支付,看了微信官方文檔,找了很多網頁,發現和文檔/demo不匹配,現在自己算是弄出來了(文件名稱有所更改),貼出來分享一下 一.將有用的官方lib文件和使用的相關文件放置到vendor當中 二.調用同一支付介面 WechatController ...


最近折騰微信掃碼支付,看了微信官方文檔,找了很多網頁,發現和文檔/demo不匹配,現在自己算是弄出來了(文件名稱有所更改),貼出來分享一下

 

一.將有用的官方lib文件和使用的相關文件放置到vendor當中

二.調用同一支付介面

WechatController

//調用同一支付介面
public function native($v_oid='',$v_amount=''){
ini_set('date.timezone','Asia/Shanghai');
error_reporting(E_ERROR);
//添加相關的類文件
vendor('Wxpay.WxPayApi');
vendor('Wxpay.log');
vendor('Wxpay.NativePay');
//初始化日誌
$logHandler= new \CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = \Log::Init($logHandler, 15);
//接受訂單信息
if(trim($v_oid)<>"") //判斷是否有傳遞訂單號
{
$v_oid = trim($v_oid);
}
else
{
$this->error('訂單號為空',U('User/index'));
exit;
}

$v_amount = trim($v_amount*100); //支付金額

//調用同一支付介面
$notify = new \NativePay();
$input = new \WxPayUnifiedOrder();
//商品描述----------------------------需要參數傳遞/統一信息
$input->SetBody("商品描述位置");
//附加數據
$input->SetAttach("附加數據位置");
//商戶訂單號
$input->SetOut_trade_no($v_oid);
//總金額
$input->SetTotal_fee($v_amount);
//開始時間
$input->SetTime_start(date("YmdHis"));
//結束時間
$input->SetTime_expire(date("YmdHis", time() + 600));
//商品標記
$input->SetGoods_tag("商品標記位置");
//非同步通知地址,不能攜帶任何參數
$input->SetNotify_url(U('NotifyProcess'));
//交易類型
$input->SetTrade_type("NATIVE");
//商品id
$input->SetProduct_id("123456789");
//獲取同一支付介面結果
$result = $notify->GetPayUrl($input);
$url2 = $result["code_url"];

$this->assign('data',urlencode($url2));
$this->assign('v_oid',$v_oid); $this->assign('v_amount',$v_amount/100); $this->display();}三.生成二維碼
三.微信支付生成二維碼
public function qrcode(){
error_reporting(E_ERROR);
vendor('Wxpay.phpqrcode.phpqrcode');
$url = $_GET["data"];
\QRcode::png($url);
}

四.非同步處理
具體處理流程和方式按個人需求

//微信非同步查詢訂單機制
public function Queryorder($transaction_id)
{
$input = new \WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = \WxPayApi::orderQuery($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;
}

五.再來個form表單展示二維碼

<form action="" method="post" id="myForm-table">
<h2>訂單信息</h2>
<div class="orderNumber">
<p class="a">訂單號:"{$v_oid}"</p>
<p class="b">
<span class="left">應付金額:<strong><em>{$v_amount}</em>元</strong></span>
<span class="right">付款後,飛行之翼客服會與您聯繫,如有問題請咨詢24小時飛行熱線 400-700-2016</span>
</p>
</div>
<h2>微信支付</h2>
<img src="{:U('qrcode')}?data={$data}" alt="微信掃碼">
<div class="order-submit"><a href="javascript:history.go(-1);" class="submitOrder Order">返回其他支付方式</a></div>
</form>



成功的圖就不附上了,這是我遇到的問題,由於要重構,所以比較亂,無效代碼也比較多,需要整理,記錄下來,分享一二
 



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MVC中Bundles可以提高代碼的可重用性 我每個頁面都需要用到這十幾個JS+CSS 當我把MVC發佈到伺服器以後,Bundles中的JS和CSS會失效的時候 寶寶的心裡是崩潰的.... 查了很多資料 都說刪除一個BIN中的DLL就好了 但是每次重新生成的時候 那個DLL還會出現 並且刪除後發佈到 ...
  • 移植WPF軟體到uwp時碰到用作對話框的Window有多種處理選擇。我個人認為最省事的是用ContentDialog模擬Window。 比如你想把上面這個WPF窗體弄到uwp裡面去 1.修改ContentDialog的預設樣式 新建一個模板化控制項RoundCornerContentDialog 讓它 ...
  • 在MVC系統中,我們接受數據,運用的是ModelBinder 的技術。 MVC學習系列——ActionResult擴展在這個系列中,我們自定義了XmlResult的返回結果。 那麼是不是意味著能POST一個XML數據類型給我們項目,這樣的話,我們需要自定義一個XmlModelBinder來接受XML ...
  • 前言 孔子說:"軟體是對客觀世界的抽象"。 首先聲明,這裡的"三維導航"和地圖沒一毛錢關係,"四核驅動"和硬體也沒關係,而是為了複雜的應用而發明創造的導航邏輯。說這是發明創造,也不是危言聳聽,因為它完全突破了傳統意義的頁面導航概念,看完了本博客以後,相信會讓你腦洞大開。當然這也是一種嘗試,只有UWP ...
  • 在MVC中,Filter也是可以擴展的。在此,本人對Filter的理解就是AOP,不知道各位大俠,有什麼高的見解,呵呵。。。 首先MVC四大過濾神器IAuthorizationFilter,IActionFilter,IResultFilter,IExceptionFilter。 在此之前,我們先安 ...
  • Session.Abandon();//清除全部Session//清除某個SessionSession["UserName"] = null;Session.Remove("UserName"); Session["aa"]=變數名; //賦值 ...
  • Julia中文教程資源.txt 2016年3月28日 05:18:32 codegay 本文更新在這裡: https://github.com/FGFW/julia science and technology 官方的資料總是少不了需要自己去看的. julia 英文手冊 http://docs.ju ...
  • 繼續上一章所講,上一章我們最後面說道,雖然這個是很小的程式,但還有好幾個要優化的地方。先複製一下老的view.py代碼。 其中驗證token的方法,已經重疊了,python教我們,永遠不要重覆自己的代碼,這是很醜陋的行為。今天我們把它換成一個裝飾器,然後再把redis調整一下,看看代碼會不會簡潔很多 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...