WeChat のアプリケーションでは、WeChat 決済はより便利な部分ですが、WeChat ビジネスが非常に普及している時代に、自分の店舗が WeChat 決済を追加しないのは不合理だと思われます。は、大多數(shù)の WeChat ユーザーに利便性を提供するように設(shè)計されており、販売者により良い支払いサービスを提供するために、WeChat の支払いおよびセキュリティ システムは Tencent Tenpay によって強(qiáng)化されています。この記事では主に、一般的なビジネス コールの一部を?qū)g現(xiàn)するために、WeChat 支払いアクセス、WeChat 支払い API のカプセル化、および WeChat 公式アカウントでの API 呼び出しを?qū)g裝する方法を紹介します。
1. WeChat 支払いを開いて設(shè)定します
WeChat 支払いは WeChat パブリック アカウントの認(rèn)証の基礎(chǔ)であり、WeChat 認(rèn)証には関連情報の署名とアカウントの認(rèn)証が必要です。電話番號 関連情報を確認(rèn)するには、お問い合わせください。
WeChat 支払い API の使用を開始する前に、通常、バックグラウンドで特定の構(gòu)成を?qū)g行する必要があります。たとえば、公式アカウントの支払い用の認(rèn)証ディレクトリ、テスト ホワイトリスト、その他の情報を構(gòu)成する必要があります。以下に示すように、QR コード スキャンでサポートされるコールバック処理アドレス (この実裝については後で説明します)。
API を使用する前に、返金や注文のキャンセルなど、WeChat 上の一部の主要な操作には証明書が必要であり、通常の支払い操作には販売者番號、販売者などの情報も必要であることを知っておく必要があります。支払いキーなど、これらの証明書と秘密キーの情報は、WeChat Pay の加盟店プラットフォームから取得され、WeChat Pay が有効化されて承認(rèn)されると、加盟店プラットフォームにログインして関連する操作を?qū)g行できます。
まず、開発用コンピューターに証明書をインストールする必要があります。
次に、API 秘密キーを設(shè)定する必要があります
最後に、開発環(huán)境で使用するために [API Security] プロジェクトに証明書をダウンロードします。
2. WeChat Payment API の概要
WeChat Payment の関連パラメータを設(shè)定し、証明書、API キー、販売者番號、その他の情報を取得した後、WeChat Payment API の具體的な使用法を理解し始めることができます。さまざまなアプリケーションで簡単に呼び出せるように、最初に API を C# クラス ライブラリにカプセル化して使用する必要があります。
WeChat 支払いは、スキャン コード支払い、公式アカウント支払い、JSAPI 支払い、APP 支払いなど、多くの方法に分かれています。ただし、コア API は類似しており、基本的に以下のスクリーンショットにある複數(shù)の API をカバーしていますが、インターフェイスがいくつか異なります。 。
スキャンコード支払いから理解することができます。これは、QR コードをスキャンして支払うシナリオであり、モード 1 とモード 2 の 2 つの方法に分かれています。
スキャンQRコード支払いは2つのモードに分けることができ、加盟店は支払いシナリオに応じて対応するモードを選択できます。
[モード 1]: 販売者のバックエンド システムは、リンク內(nèi)の固定パラメータ productid (製品 ID または注文番號として定義できる) を使用して、WeChat 支払いルール リンクに基づいて QR コードを生成します。ユーザーがコードをスキャンした後、WeChat 支払いシステムは、productid とユーザーの一意の識別子 (openid) を販売者のバックエンド システムに呼び出します (支払いコールバック URL を設(shè)定する必要があります)。販売者のバックエンド システムは、productid に基づいて支払いトランザクションを生成します。 、最後に WeChat 支払いシステムがユーザーの支払いプロセスを開始します。
[モード 2]: 販売者のバックエンド システムは WeChat Pay の [統(tǒng)合注文 API] を呼び出して前払いトランザクションを生成し、インターフェイスから返されたリンクから QR コードを生成します。ユーザーはコードをスキャンしてパスワードを入力し、支払いを完了します。取引。注: このモードでの前払い注文は2時間有効であり、有効期限を過ぎると支払いを行うことはできません。
スキャンコード決済のAPI記述によると、開発を容易にするために、これらのインターフェイス(統(tǒng)合注文発注、注文照會、注文完了、返金申請、返金照會、明細(xì)ダウンロードなど)を1つずつカプセル化できます。
モード 1 と 2 の両方で、統(tǒng)合注文インターフェイスを使用し、顧客がスキャンして支払うための対応する QR コードを生成する必要があります。
次に、その具體的な使用方法を見てみましょう。
1) アプリケーションシナリオ
スキャンされた支払いシナリオを除き、販売者システムは最初にこのインターフェイスを呼び出して、WeChat 支払いサービスのバックグラウンドで前払いトランザクション注文を生成し、正しい After を返します。前払いトランザクション識別子に応答し、コード、JSAPI、APP、およびその他のさまざまなシナリオをスキャンして、支払いを開始するためのトランザクション文字列を生成します。
2) インターフェースリンク
URLアドレス: https://api.mch.weixin.qq.com/pay/unifiedorder
3) 証明書かどうかは必須です
必要ありません
4) リクエストパラメータ
リクエストパラメータはたくさんあるようですが、システムに必要な固定パラメータと、システムに必要な固定パラメータの2つに大別されます。部分はビジネスに必要なパラメータです。
システムに必要な固定パラメータは以下の通りです。
その一部はビジネスパラメータです。ビジネスパラメータは次のとおりです。主に注文の関連する商品ID、説明、コストなどを記録します
WeChat支払いインターフェースの呼び出しは次のとおりです。パブリック アカウントの他のインターフェイスの呼び出しとは異なります。ここではすべて XML を使用して交換されますが、JSON よりも利便性と柔軟性が劣ると思われます。次に示すのは、データを送信するための統(tǒng)一された注文インターフェイスです。
次に、以下のコード例に示すように、返されるデータも XML 形式であり、フィールドの內(nèi)容はまだ不確実であるため、公式 Web サイトで推奨されているように、辭書コレクションを使用して返されたデータ オブジェクトを保存します。
///?<summary> ????///?微信支付接口 ????///?</summary> ????public?interface?ITenPayApi ????{?????? ????????///?<summary> ????????///?生成掃描支付模式一URL ????????///?</summary> ????????///?<param>商品ID ????????///?<returns></returns> ????????string?GetPrePayUrl(string?productId); ????????///?<summary> ????????///?生成直接支付url,支付url有效期為2小時,模式二 ????????///?</summary> ????????///?<param>商品訂單數(shù)據(jù) ????????///?<returns></returns> ????????string?GetPayUrl(WxPayOrderData?info); ????????///?<summary> ????????///?統(tǒng)一下單。(不需要證書,默認(rèn)不需要) ????????///?除被掃支付場景以外,商戶系統(tǒng)先調(diào)用該接口在微信支付服務(wù)后臺生成預(yù)支付交易單, ????????///?返回正確的預(yù)支付交易回話標(biāo)識后再按掃碼、JSAPI、APP等不同場景生成交易串調(diào)起支付。 ????????///?</summary> ????????///?<param>商品訂單數(shù)據(jù) ????????WxPayData?UnifiedOrder(WxPayOrderData?info); ????????.............インターフェイス メソッドの入力パラメーターについては、いくつかのビジネス パラメーターを格納するエンティティ クラス WxPayOrderData
を定義します。これらのパラメーターは、2 番目のポイントのインターフェイスの説明に従って定義されます。
///?<summary> ????///?統(tǒng)一下單的商品訂單信息 ????///?</summary> ????public?class?WxPayOrderData ????{ ????????///?<summary> ????????///?商品ID,?trade_type=NATIVE,此參數(shù)必傳 ????????///?</summary> ????????public?string?product_id?{?get;?set;?} ????????///?<summary> ????????///?商品或支付單簡要描述 ????????///?</summary> ????????public?string?body?{?get;?set;?} ????????///?<summary> ????????///?訂單總金額,單位為分 ????????///?</summary> ????????public?int?total_fee?{?get;?set;?} ????????///?<summary> ????????///?商品標(biāo)記,代金券或立減優(yōu)惠功能的參數(shù),說明詳見代金券或立減優(yōu)惠 ????????///?</summary> ????????public?string?goods_tag?{?get;?set;?} ????????///?<summary> ????????///?交易類型,默認(rèn)為:NATIVE。 ????????///?JSAPI--公眾號支付、NATIVE--原生掃碼支付、APP--app支付 ????????///?</summary> ????????public?string?trade_type?{?get;?set;?} ????????///?<summary> ????????///?商品名稱明細(xì)列表 ????????///?</summary> ????????public?string?detail?{?get;?set;?} ????????///?<summary> ????????///?附加數(shù)據(jù) ????????///?在查詢API和支付通知中原樣返回,該字段主要用于商戶攜帶訂單的自定義數(shù)據(jù) ????????///?</summary> ????????public?string?attach?{?get;?set;?} ????????///?<summary> ????????///?用戶標(biāo)識 ????????///?trade_type=JSAPI,此參數(shù)必傳,用戶在商戶appid下的唯一標(biāo)識。 ????????///?</summary> ????????public?string?openid?{?get;?set;?} ????????public?WxPayOrderData() ????????{ ????????????this.trade_type?=?"NATIVE"; ????????} ????}次に、インターフェイスによって返されるクラス WxPayData を定義します。このクラスは、公式 Web サイトの例で説明されており、データを格納するために組み込まれています。コードの一部は次のとおりですが、コンストラクターで必要なパラメーター (固定パラメーター) の初期化を容易にするために、それに関連する変更を加えました。
public?class?WxPayData ????{ ????????//采用排序的Dictionary的好處是方便對數(shù)據(jù)包進(jìn)行簽名,不用再簽名之前再做一次排序 ????????private?SortedDictionary<string>?m_values?=?new?SortedDictionary<string>(); ???????? ????????///?<summary> ????????///?默認(rèn)構(gòu)造函數(shù) ????????///?如果initDefault為true,則自動填入字段(appid,mch_id,time_stamp,nonce_str,out_trade_no,) ????????///?</summary> ????????public?WxPayData(bool?initDefault?=?false) ????????{ ????????????if(initDefault) ????????????{ ????????????????Init(); ????????????} ????????} ????????///?<summary> ????????///?對象初始化后,自動填入字段(appid,mch_id,time_stamp,nonce_str,out_trade_no,) ????????///?</summary> ????????public?void?Init() ????????{ ????????????//初始化幾個參數(shù) ????????????this.SetValue("appid",?WxPayConfig.APPID);//公眾帳號id ????????????this.SetValue("mch_id",?WxPayConfig.MCHID);//商戶號 ????????????this.SetValue("nonce_str",?GenerateNonceStr());//隨機(jī)字符串 ????????????this.SetValue("out_trade_no",?GenerateOutTradeNo(WxPayConfig.MCHID));//隨機(jī)字符串 ????????}</string></string>次に、上記のデータ定義に基づいて、次のコードに示すように、主に入力パラメータを必要な辭書パラメータ セットに変換する統(tǒng)合順序関數(shù)の內(nèi)容を?qū)g現(xiàn)できます。
///?<summary> ????????///?統(tǒng)一下單。(不需要證書,默認(rèn)不需要) ????????///?除被掃支付場景以外,商戶系統(tǒng)先調(diào)用該接口在微信支付服務(wù)后臺生成預(yù)支付交易單, ????????///?返回正確的預(yù)支付交易回話標(biāo)識后再按掃碼、JSAPI、APP等不同場景生成交易串調(diào)起支付。 ????????///?</summary> ????????///?<param>商品訂單數(shù)據(jù) ????????public?WxPayData?UnifiedOrder(WxPayOrderData?info) ????????{ ????????????WxPayData?data?=?new?WxPayData(true); ????????????data.SetValue("product_id",?info.product_id);//商品ID ????????????data.SetValue("openid",?info.openid);//商品ID ????????????//其他信息 ????????????data.SetValue("body",?info.body);//商品描述 ????????????data.SetValue("attach",?info.attach);//附加數(shù)據(jù) ????????????data.SetValue("total_fee",?info.total_fee);//總金額 ????????????data.SetValue("goods_tag",?info.goods_tag);//商品標(biāo)記 ????????????data.SetValue("trade_type",?info.trade_type);//交易類型 ????????????//默認(rèn)構(gòu)建 ????????????data.SetValue("time_start",?DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始時間 ????????????data.SetValue("time_expire",?DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易結(jié)束時間 ??????????..............最終的なデータ交換ロジックでは、以下に示すように、URL を POST して XML データを送信し、戻り結(jié)果を取得できます。
りー
其中上面的函數(shù)的代碼邏輯如下所示,主要是把返回的結(jié)果再還原為XML對象類WxPayData。
///?<summary> ????????///?通用的獲取結(jié)果函數(shù) ????????///?</summary> ????????private?WxPayData?GetPostResult(WxPayData?data,?string?url) ????????{ ????????????string?xml?=?data.ToXml(); ????????????string?response?=?helper.GetHtml(url,?xml,?true); ????????????WxPayData?result?=?new?WxPayData(); ????????????result.FromXml(response); ????????????return?result; ????????}
對于掃碼操作的模式二,直接生成一種二維碼,不需要后臺進(jìn)行回調(diào)的,那么它的實現(xiàn)邏輯只需要對上面代碼進(jìn)行封裝就可以了,如先構(gòu)建二維碼的函數(shù)代碼如下所示。
///?<summary> ????????///?生成直接支付url,支付url有效期為2小時,模式二 ????????///?</summary> ????????///?<param>商品訂單數(shù)據(jù) ????????///?<returns></returns> ????????public?string?GetPayUrl(WxPayOrderData?info) ????????{ ????????????WxPayData?result?=?UnifiedOrder(info);//調(diào)用統(tǒng)一下單接口 ????????????return?result.GetString("code_url");//獲得統(tǒng)一下單接口返回的二維碼鏈接 ????????}
如在Winform界面里面,調(diào)用生成二維碼的代碼如下所示,主要邏輯就是構(gòu)建好二維碼,然后顯示在界面上。
private?void?btnGetPayUrl_Click(object?sender,?EventArgs?e) ????????{ ????????????//測試掃碼模式二的生成二維碼方式 ????????????WxPayOrderData?data?=?new?WxPayOrderData() ????????????{ ????????????????product_id?=?"123456789", ????????????????body?=?"測試支付-模式二", ????????????????attach?=?"愛奇迪技術(shù)支持", ????????????????detail?=?"測試掃碼支付-模式二", ????????????????total_fee?=?1, ????????????????goods_tag?=?"test1" ????????????}; ????????????var?url?=?api.GetPayUrl(data); ????????????var?image?=?api.GenerateQRImage(url); ????????????this.imgGetPayUrl.Image?=?image; ????????????this.imgGetPayUrl.SizeMode?=?PictureBoxSizeMode.StretchImage; ????????}
另外對于模式一,它在前端傳入一個簡單的產(chǎn)品ID,生成二維碼,當(dāng)用戶掃碼的時候,微信后臺會調(diào)用商戶平臺(我們服務(wù)器)的回調(diào)處理方法,這個回調(diào)方法會調(diào)用統(tǒng)一下單的API進(jìn)行生成支付交易,過程有點復(fù)雜,我們來看看,我們的實現(xiàn)代碼如下所示。
///?<summary> ????????///?生成掃描支付模式一URL ????????///?</summary> ????????///?<param>商品ID ????????///?<returns></returns> ????????public?string?GetPrePayUrl(string?productId) ????????{ ????????????WxPayData?data?=?new?WxPayData(true); ????????????data.SetValue("product_id",?productId);//商品ID????? ????????????data.SetValue("time_stamp",?data.GenerateTimeStamp());//隨機(jī)字符串????????? ????????????data.SetValue("sign",?data.MakeSign());//簽名 ????????????string?str?=?data.ToUrlParams();//轉(zhuǎn)換為URL串 ????????????string?url?=?"weixin://wxpay/bizpayurl?"?+?str; ????????????return?url; ????????}
它的調(diào)用代碼生成二維碼操作如下所示。
private?void?btnGetPrePayUrl_Click(object?sender,?EventArgs?e) ????????{ ????????????var?productId?=?"12345678"; ????????????var?url?=?api.GetPrePayUrl(productId); ????????????var?image?=?api.GenerateQRImage(url); ????????????this.imgGetPrePayUrl.Image?=?image; ????????????this.imgGetPayUrl.SizeMode?=?PictureBoxSizeMode.StretchImage; ????????}
我們在第一小節(jié)里面介紹了,需要在微信后臺配置掃碼的回調(diào)函數(shù),如下所示。
這樣我們還需要添加一個頁面aspx、或者一般處理程序ashx的方式來實現(xiàn)掃碼的回調(diào)過程。具體的邏輯也就是在這個頁面里面獲取到提交過來的參數(shù),然后調(diào)用統(tǒng)一下單處理后,進(jìn)行數(shù)據(jù)返回即可,代碼邏輯如下所示。
?
4、在頁面上進(jìn)行掃碼處理
前面的例子,我介紹了Winfrom的掃碼例子,很多時候,我們的應(yīng)用可能是基于Web的,那么它的實現(xiàn)是如何的呢,下面我繼續(xù)介紹一下。
首先我們在自己的業(yè)務(wù)Web后臺系統(tǒng)里面,添加兩個頁面,主要是用來生成二維碼在頁面上進(jìn)行展示的,如下所示。
最終我們在NativePayPage.aspx頁面上展示我們的二維碼,方便用戶進(jìn)行掃碼支付處理,頁面的代碼很簡單,我們只需要在前端頁面放置兩個圖片控件,圖片內(nèi)容通過MakeQRCode.aspx頁面進(jìn)行生成就可以了。
nbsp;html> ????<meta> ????<meta>? ????<title>微信支付樣例-掃碼支付</title> ????<div>掃碼支付模式一</div><br> ????<image></image> ????<br><br><br> ????<div>掃碼支付模式二</div><br> ????<image></image> ????
頁面后臺的代碼就是綁定二維碼的過程,代碼如下所示,和Winform的代碼類似操作。
protected?void?Page_Load(object?sender,?EventArgs?e) ????????{ ????????????TenPayApi?api?=?new?TenPayApi(); ????????????var?productId?=?"123456789"; ????????????//生成掃碼支付模式一url ????????????string?url1?=?api.GetPrePayUrl(productId); ????????????//生成掃碼支付模式二url ????????????WxPayOrderData?info?=?new?WxPayOrderData() ????????????{ ????????????????product_id?=?"123456789", ????????????????body?=?"測試支付-模式二", ????????????????attach?=?"愛奇迪技術(shù)支持", ????????????????detail?=?"測試掃碼支付-模式二", ????????????????total_fee?=?1, ????????????????goods_tag?=?"test1" ????????????}; ????????????string?url2?=?api.GetPayUrl(info); ????????????//將url生成二維碼圖片 ????????????Image1.ImageUrl?=?"MakeQRCode.aspx?data="?+?HttpUtility.UrlEncode(url1); ????????????Image2.ImageUrl?=?"MakeQRCode.aspx?data="?+?HttpUtility.UrlEncode(url2); ????????}
實現(xiàn)后的頁面效果如下所示。
實現(xiàn)并預(yù)覽效果,確定是我們所需的頁面后,我們可以發(fā)布在公眾號的菜單連接上進(jìn)行測試使用了。
打開微信公眾號-廣州愛奇迪,我們可以看到對應(yīng)的菜單發(fā)生改變,并且看到進(jìn)入微信支付的菜單可以進(jìn)行支付了。
上記は WeChat 決済の QR コード スキャン プロセスの実裝であり、他の多くの API インターフェイスも含まれており、機(jī)會があれば後で紹介する可能性があります。 WeChat 決済のインターフェース実裝は他の WeChat インターフェースよりも複雑ですが、いくつかのケースを完了すれば、呼び出し方法は基本的に一貫していて似ているため、殘りは比較的簡単です。
C# 開発の詳細(xì)、WeChat ポータルとアプリケーション、WeChat 支払いアクセスと API のカプセル化、および関連記事については、PHP 中國語 Web サイトに注目してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover
寫真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中國語版
中國語版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)