微信網(wǎng)站開發(fā)源代碼(微信網(wǎng)站開發(fā)源代碼是什么)
緣起
今年公司某個(gè)項(xiàng)目需要全面接入微信支付 V3 版 API。起初覺得,2014 年微信支付就已上線了 V3 版 API,這都 2021 年了,就算官方不給力,怎么著社區(qū)也該有幾個(gè)造好的 .NET 的輪子了吧?于是興沖沖地到 NuGet 上開始搜索“微信支付”四個(gè)大字,結(jié)果……
倒不是沒有現(xiàn)成的輪子,但基本都是只包含一些簡單 API(如下單、查單、退款等等),與需求不符;偶爾有一些看似封裝全的,點(diǎn)進(jìn)去一看卻是基于 V2 版 API 的。
沒辦法,自己動(dòng)手,豐衣足食!
接入了微信支付后想著,既然微信支付都有了,為啥不把公眾號、小程序、企業(yè)微信之類的也接入了呢?
于是乎 SKIT.FlurlHttpClient.Wechat 這個(gè)項(xiàng)目就誕生了。
項(xiàng)目介紹
SKIT.FlurlHttpClient.Wechat 是一個(gè)基于 Flurl.Http 的微信 API HTTP 客戶端。
包含以下特性:
支持 .NET Framework 4.6.1+、.NET Standard 2.0+、.NET Core 2.0+、.NET 5。
支持 Windows / Linux / macOS 多平臺(tái)部署。
支持 System.Text.Json(默認(rèn))和 Newtonsoft.Json 兩種序列化方式。
異步式編程。
強(qiáng)類型接口模型。
提供攔截器功能。
提供微信 API 所需的 MD5、SHA-1、SHA-256、AES、RSA 等算法工具類。
完整、完善、完全的微信 API 封裝,同時(shí)可靈活自行擴(kuò)展。
現(xiàn)有以下模塊:
公眾平臺(tái)(公眾號、小程序、小游戲、小商店) 開放平臺(tái)模塊: SKIT.FlurlHttpClient.Wechat.Api
商戶平臺(tái)(微信支付)模塊: SKIT.FlurlHttpClient.Wechat.TenpayV3
企業(yè)微信(企業(yè)號)模塊: SKIT.FlurlHttpClient.Wechat.Work
廣告平臺(tái)(廣點(diǎn)通)模塊: SKIT.FlurlHttpClient.Wechat.Ads
以接入微信支付為例,其他模塊的開發(fā)流程與之十分類似。
安裝: dotnet add package SKIT.FlurlHttpClient.Wechat.TenpayV3
初始化:
usingSKIT.FlurlHttpClient.Wechat;
usingSKIT.FlurlHttpClient.Wechat.TenpayV3;
usingSKIT.FlurlHttpClient.Wechat.TenpayV3.Settings;
/* 平臺(tái)證書管理器,具體用法請參見文檔 */
varcertManager = newInMemoryCertificateManager;
/* 僅列出必須配置項(xiàng)。也包含一些諸如超時(shí)時(shí)間、UserAgent 等的配置項(xiàng) */
varoptions = newWechatTenpayClientOptions
{
MerchantId = "微信商戶號",
MerchantV3Secret = "微信商戶 v3 API 密鑰",
MerchantCertSerialNumber = "微信商戶證書序列號",
MerchantCertPrivateKey = "-----BEGIN PRIVATE KEY-----微信商戶證書私鑰-----END PRIVATE KEY-----",
CertificateManager = certManager
};
varclient = newWechatTenpayClient(options);
usingSKIT.FlurlHttpClient.Wechat.TenpayV3;
usingSKIT.FlurlHttpClient.Wechat.TenpayV3.Models;
/* 以 JSAPI 統(tǒng)一下單接口為例 */
varrequest = newCreatePayTransactionJsapiRequest
{
OutTradeNumber = "商戶訂單號",
AppId = "微信 AppId",
Deion = "訂單描述",
ExpireTime = DateTimeOffset.Now.AddMinutes(15),
NotifyUrl = "https://example.com",
Amount = newCreatePayTransactionJsapiRequest.Types.Amount
{
Total = 100
},
Payer = newCreatePayTransactionJsapiRequest.Types.Payer
{
OpenId = "微信 OpenId"
}
};
varresponse = awaitclient.ExecuteCreatePayTransactionJsapiAsync(request);
if(response.IsSuccessful)
{
Console.WriteLine( "PrepayId:"+ response.PrepayId);
}
else
{
Console.WriteLine( "HTTP 狀態(tài):"+ response.RawStatus);
Console.WriteLine( "錯(cuò)誤代碼:"+ response.ErrorCode);
Console.WriteLine( "錯(cuò)誤描述:"+ response.ErrorMessage);
}
展開全文
/* 一般情況下可以跳過驗(yàn)證響應(yīng)的簽名 */
boolvalid = client.VerifyResponseSignature(response);
/* 字典結(jié)構(gòu),包含客戶端 JS-SDK 調(diào)起支付所需的完整參數(shù) */
varparamMap = client.GenerateParametersForJsapiPayRequest(request.AppId, response.PrepayId);
stringcallbackJson = "{ 微信商戶平臺(tái)發(fā)來的 JSON 格式的通知內(nèi)容 }";
stringcallbackTimestamp = "微信回調(diào)通知中的 Wechatpay-Timestamp 標(biāo)頭";
stringcallbackNonce = "微信回調(diào)通知中的 Wechatpay-Nonce 標(biāo)頭";
stringcallbackSignature = "微信回調(diào)通知中的 Wechatpay-Signature 標(biāo)頭";
stringcallbackSerialNumber = "微信回調(diào)通知中的 Wechatpay-Serial 標(biāo)頭";
boolvalid = client.VerifyEventSignature(callbackTimestamp, callbackNonce, callbackJson, callbackSignature, callbackSerialNumber);
if(valid)
{
/* 將 JSON 反序列化得到通知對象 */
/* 你也可以將 WechatTenpayEvent 類型直接綁定到 MVC 模型上,這樣就不再需要手動(dòng)反序列化 */
varcallbackModel = client.DeserializeEvent(callbackJson);
if( "TRANSACTION.SUCCESS".Equals(callbackModel.EventType))
{
/* 根據(jù)事件類型,解密得到支付通知敏感數(shù)據(jù) */
varcallbackResource = client.DecryptEventResourceEvents.TransactionResource(callbackModel);
stringoutTradeNumber = callbackResource.OutTradeNumber;
stringtransactionId = callbackResource.TransactionId;
Console.WriteLine( "訂單 {0} 已完成支付,交易單號為 {1}", outTradeNumber, transactionId);
}
}
更多使用說明請閱讀項(xiàng)目倉庫中的開發(fā)文檔。
項(xiàng)目倉庫中還包含了一個(gè)示例項(xiàng)目,以供開發(fā)者快速掌握本庫的使用方法。
FAQ 1. Flurl.Http 是什么?
Flurl.Http 是一個(gè)輕量級 HTTP 庫,是 .NET 中最受歡迎擴(kuò)展庫之一,在 NuGet 上的累計(jì)下載量超過 1700 萬、日均下載量超過 6 千、GitHub 2.6k Stars(數(shù)據(jù)統(tǒng)計(jì)截至 2021-06-01)。
與另一個(gè)流行的 HTTP 庫 RestSharp 相比, Flurl.Http 底層基于 System.Net.Http.HttpClient ,而 RestSharp 底層則基于 System.Net.HttpWebRequest ,前者在多核多線程環(huán)境下的性能基準(zhǔn)測試中表現(xiàn)要遠(yuǎn)優(yōu)于后者,同時(shí)也是微軟官方目前推薦的 HTTP 客戶端方案。
2. 本庫與盛派微信 SDK(Senparc.Weixin)有什么區(qū)別?
本庫 專注于 API 本身的封裝 ,捎帶提供了一些用于加解密、序列化的工具類, 使用更靈活 ;盛派微信 SDK 提供了大而全的功能,可與 MVC / WebAPI 深度集成。
本庫 遵循微軟官方推薦的 C# 屬性命名方式(大駝峰命名法) 對接口模型進(jìn)行定義;盛派微信 SDK 提供的是微信接口本身的命名方式(蛇形命名法和小駝峰命名法混雜)。
本庫 封裝了目前微信官方提供的所有 API ;盛派微信 SDK 只提供了常用的 API。
直接原因是本庫的依賴庫最低支持到 .NET Framework 4.6.1。
間接原因是為了支持跨平臺(tái)的 .NET Standard 2.0,只能兼容到 .NET Framework 4.6.1。
根本原因是微軟官方已于 2016 年 1 月 12 日終止了對 .NET Framework 4.6.1 以下版本的技術(shù)支持。也就是說,微軟已經(jīng)不再為此提供安全更新,在大部分技術(shù)合規(guī)要求中這一點(diǎn)都是扣分項(xiàng),所以建議各位開發(fā)者目標(biāo)框架能升級就升級。
倉庫
GitHub:https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat
Gitee:https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat
以上倉庫地址同步更新,均可接受 Issue 或 Pull Request。
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。