這篇文章給大家分享的是有關(guān)微信開發(fā)之微信現(xiàn)金紅包的封裝及使用方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
1)使用場景
微信支付現(xiàn)金紅包向微信支付商戶開發(fā),具體能力如下:
◆ 商戶調(diào)用接口時,通過指定發(fā)送對象以及發(fā)送金額的方式發(fā)放紅包,這樣的方式,允許商戶靈活的應用于各種各樣豐富的活動場景
◆ 領(lǐng)取到紅包后,用戶的資金直接進入微信零錢,避免繁復的領(lǐng)獎流程,帶給用戶微信支付原生的流暢體驗
2)微信紅包發(fā)送規(guī)則
發(fā)送頻率規(guī)則
◆ 每分鐘發(fā)送紅包數(shù)量不得超過1800個;
◆ 同一個商戶號,每分鐘最多給同一個用戶發(fā)送一個紅包;
紅包規(guī)則
◆ 單個紅包金額介于[1.00元,200.00元]之間;
◆ 同一個紅包只能發(fā)送給一個用戶;(如果以上規(guī)則不滿足您的需求,請發(fā)郵件至wxhongbao@tencent.com獲取升級指引)
◆ 紅包發(fā)放后72小時未被領(lǐng)取將進行退款
3) 微信紅包接口調(diào)用流程
◆ 后臺API調(diào)用:待進入聯(lián)調(diào)過程時與開發(fā)進行詳細溝通;
◆ 告知服務器:告知服務器接收微信紅包的用戶openID,告知服務器該用戶獲得的金額;
◆ 從商務號扣款:服務器獲取信息后從對應的商務號扣取對應的金額;
◆ 調(diào)用失?。阂虿环习l(fā)送規(guī)則,商務號余額不足等原因造成調(diào)用失敗,反饋至調(diào)用方;
◆ 發(fā)送成功:以微信紅包公眾賬號發(fā)送對應紅包至對應用戶;
用于企業(yè)向微信用戶個人發(fā)現(xiàn)金紅包,目前支持向指定微信用戶的openid發(fā)放指定金額紅包。
雖然可以通過微信的商戶后臺進行現(xiàn)金紅包的發(fā)放,但我們也可以利用微信提供的接口API進行現(xiàn)金紅包的發(fā)送。
請求Url | https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack |
---|---|
是否需要證書 | 是(證書及使用說明詳見商戶證書) |
請求方式 | POST |
字段名 | 字段 | 必填 | 示例值 | 類型 | 說明 |
---|---|---|---|---|---|
隨機字符串 | nonce_str | 是 | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | String(32) | 隨機字符串,不長于32位 |
簽名 | sign | 是 | C380BEC2BFD727A4B6845133519F3AD6 | String(32) | 詳見簽名生成算法 |
商戶訂單號 | mch_billno | 是 | 10000098201411111234567890 | String(28) | 商戶訂單號(每個訂單號必須) 組成:mch_id+yyyymmdd+10位一天內(nèi)不能重復的數(shù)字。 接口根據(jù)商戶訂單號支持重入,如出現(xiàn)超時可再調(diào)用。 |
商戶號 | mch_id | 是 | 10000098 | String(32) | 微信支付分配的商戶號 |
公眾賬號appid | wxappid | 是 | wx8888888888888888 | String(32) | 微信分配的公眾賬號ID(企業(yè)號corpid即為此appId)。接口傳入的所有appid應該為公眾號的appid(在mp.weixin.qq.com申請的),不能為APP的appid(在open.weixin.qq.com申請的)。 |
商戶名稱 | send_name | 是 | 天虹百貨 | String(32) | 紅包發(fā)送者名稱 |
用戶openid | re_openid | 是 | oxTWIuGaIt6gTKsQRLau2M0yL16E | String(32) | 接受紅包的用戶 用戶在wxappid下的openid |
付款金額 | total_amount | 是 | 1000 | int | 付款金額,單位分 |
紅包發(fā)放總?cè)藬?shù) | total_num | 是 | 1 | int | 紅包發(fā)放總?cè)藬?shù) total_num=1 |
紅包祝福語 | wishing | 是 | 感謝您參加猜燈謎活動,祝您元宵節(jié)快樂! | String(128) | 紅包祝福語 |
Ip地址 | client_ip | 是 | 192.168.0.1 | String(15) | 調(diào)用接口的機器Ip地址 |
活動名稱 | act_name | 是 | 猜燈謎搶紅包活動 | String(32) | 活動名稱 |
備注 | remark | 是 | 猜越多得越多,快來搶! | String(256) | 備注信息 |
數(shù)據(jù)示例:
上面是接口及輸入?yún)?shù)的說明,一般情況下,我們需要根據(jù)這些來決定如何實現(xiàn)C#代碼的封裝,首先我們來定義我們需要的接口和類,如下所示。
通過分析上面的接口說明,我們可以發(fā)現(xiàn),其中接口有部分是固定的常規(guī)參數(shù),也就是一般公眾號或者企業(yè)號的身份信息,有部分是業(yè)務參數(shù),因此我們把它們分別分離出來,這樣有利于我們對接口的封裝和使用,那些常規(guī)的參數(shù)我們通過公眾號身份獲取就可以了,業(yè)務信息,我們可以定義一個實體類來進行數(shù)據(jù)的存儲交換即可。
對應上圖的固定的常規(guī)參數(shù),在接口說明中如下所示。
因此,這些信息我們從賬號里面設置及獲取即可,我們可以在管理后臺對它們進行配置,然后在代碼邏輯里面取出來使用即可。
根據(jù)上面的介紹,我們可以定義紅包接口代碼如下所示。
////// 微信紅包(搖一搖紅包)操作API /// public interface ILotteryApi { ////// 用于企業(yè)向微信用戶個人發(fā)現(xiàn)金紅包。需要商戶證書 /// 目前支持向指定微信用戶的openid發(fā)放指定金額紅包。 /// ///SendRedPackResult SendRedPack(SendRedPackJson json);
其中的 SendRedPackJson 是我們變化的業(yè)務參數(shù),我們定義了一個類來進行信息的承載,方便想接口傳遞信息。
////// 現(xiàn)金紅包和裂變紅包的基礎信息 /// public class BaseRedPackJson { ////// 接受紅包的用戶 /// 用戶openid /// public string re_openid { get; set; } ////// 付款金額,單位分 /// public int total_amount { get; set; } ////// 紅包發(fā)放總?cè)藬?shù) /// public int total_num { get; set; } ////// 紅包祝福語 /// public string wishing { get; set; } ////// 活動名稱 /// public string act_name { get; set; } ////// 備注信息 /// public string remark { get; set; } } ////// 發(fā)送紅包的數(shù)據(jù)信息 /// public class SendRedPackJson :BaseRedPackJson { ////// 調(diào)用接口的機器Ip地址 /// public string client_ip { get; set; } public SendRedPackJson() { this.total_num = 1;//紅包發(fā)放總?cè)藬?shù) } }
根據(jù)上面參數(shù)的定義,我們在現(xiàn)金紅包的接口實現(xiàn)里面,具體代碼如下所示,里面的邏輯內(nèi)容,主要就是傳入常規(guī)參數(shù)和業(yè)務參數(shù)兩部分,然后調(diào)用接口的地址進行數(shù)據(jù)的提交(POST),獲取返回結(jié)果并進行解析即可。
////// 用于企業(yè)向微信用戶個人發(fā)現(xiàn)金紅包。需要商戶證書 /// 目前支持向指定微信用戶的openid發(fā)放指定金額紅包。 /// ///public SendRedPackResult SendRedPack(SendRedPackJson json) { CheckAccount();//檢查AccountInfo的對象屬性值 //加入常規(guī)的參數(shù) WxPayData data = new WxPayData(); data.SetValue("wxappid", AccountInfo.UniteAppId);//公眾賬號appid data.SetValue("mch_id", AccountInfo.MchID);//商戶號 data.SetValue("nonce_str", data.GenerateNonceStr());//隨機字符串 data.SetValue("send_name", AccountInfo.Name);// 紅包發(fā)送者名稱 //商戶訂單號(每個訂單號必須) 組成:mch_id+yyyymmdd+10位一天內(nèi)不能重復的數(shù)字。 //接口根據(jù)商戶訂單號支持重入,如出現(xiàn)超時可再調(diào)用。 data.SetValue("mch_billno", data.GenerateOutTradeNo(AccountInfo.MchID)); data.SetValue("re_openid", json.re_openid); data.SetValue("total_amount", json.total_amount); data.SetValue("total_num", json.total_num); data.SetValue("wishing", json.wishing); data.SetValue("client_ip", json.client_ip); data.SetValue("act_name", json.act_name); data.SetValue("remark", json.remark); data.SetValue("sign", data.MakeSign(AccountInfo.PayAPIKey));//最后生成簽名 var url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; return Helper.GetPayResultWithCert (data, url, AccountInfo.CertPath, AccountInfo.CertPassword); }
其中發(fā)送紅包操作是需要證書的,因此需要添加對應的證書,證書是從微信的商戶平臺上進行下載的。
在商戶后臺的【API安全】項目上下載證書供我們開發(fā)環(huán)境使用。
下載證書后,在Windows環(huán)境,我們一般需要雙擊安裝,輸入所需的商戶號作為密碼即可。
在代碼里面,我們可以使用證書類進行添加
HttpHelper helper = new HttpHelper(); helper.ClientCertificates = new X509CertificateCollection(); certPath = Path.Combine(System.Environment.CurrentDirectory, certPath); helper.ClientCertificates.Add(new X509Certificate2(certPath, certPassword)); string response = helper.GetHtml(url, xml, true);
例如,我們在測試例子里面調(diào)用代碼如下所示。
//現(xiàn)金紅包 SendRedPackJson packJson = new SendRedPackJson() { act_name = "恭喜發(fā)財", client_ip = NetworkUtil.GetIPAddress(), remark = "企業(yè)紅包", wishing = "企業(yè)紅包", total_amount = 100, total_num = 1, re_openid = tosendOpenId //發(fā)送給用戶的OpenID }; var result = hbApi.SendRedPack(packJson); var message = string.Format("企業(yè)發(fā)送紅包:{0} {1}", result.Success ? "成功" : "失敗", result.Message); Console.WriteLine(message); Console.WriteLine(result.ToJson());
其中的hbApi是上面接口的構(gòu)造,如下代碼所示。
AccountInfo accountInfo = new AccountInfo() { Name = this.SendName, AppID = this.AppId, AppSecret = this.AppSecret, MchID = this.MchID, PayAPIKey = this.PayAPIKey, CertPath = this.CertPath, CertPassword = this.CertPassword, PayNotifyUrl = this.PayNotifyUrl }; ILotteryApi hbApi = new LotteryApi(accountInfo);
成功調(diào)用后,我們可以在公眾號的對話里面看到紅包的信息結(jié)果,如下是整個紅包發(fā)送及拆開的過程。
感謝各位的閱讀!關(guān)于“微信開發(fā)之微信現(xiàn)金紅包的封裝及使用方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!