ホームページ > 記事 > WeChat アプレット > C# は WeChat ポータルを開発し、WeChat 分裂の赤い封筒を適用します
前回のエッセイ「WeChat ポータルとアプリケーションの C# 開発 (33) -- WeChat 現金赤い封筒のカプセル化と使用」では、通常の現金赤い封筒のカプセル化と使用について紹介しました。一度に 1 人ずつ、ユーザーが受け取る赤い封筒が完成します。ユーザーが赤い封筒を受け取ることを許可すると、一定の金額またはランダムな金額を受け取ることができるように、複数のユーザーに赤い封筒を送信し続けることができます。分裂の赤い封筒。このエッセイは上記のテーマを継続し、C# コードのカプセル化と Fission Red Envelope の使用法を引き続き紹介します。
企業の分裂の赤い封筒を受け取ったユーザーは、引き続き友達が赤い封筒を受け取るのを手助けし、分裂の形で企業の赤い封筒をより多くの友達に広めることで、マーケティングをより楽しく、楽しくすることができます。フィッションの赤い封筒は企業のブランド効果を継続的に強化し、ブランドプロモーションのためのマーケティングツールであるフィッションコミュニケーションを形成します。企業は赤い封筒のグループの数と合計金額を指定するだけで、WeChat Pay が各赤い封筒の金額を計算するため、簡単で便利です。
WeChat Pay フィッション レッド エンベロープは、WeChat Pay 加盟店向けに開発されており、具体的な機能は次のとおりです:
1. 加盟店がインターフェイスを呼び出すと、送金金額と送信者を指定して一連の Fission レッド エンベロープが発行されます。
2. 赤い封筒を受け取った後、資金はWeChatの変更に直接転送され、ユーザーにスムーズなWeChat支払い体験を提供します
3. 指定された送信者は、残りの赤い封筒を共有できます。受け取り続けることができる友人との組み合わせにより、コミュニケーション効果が形成され、企業ブランドの価値が高まります
現金赤い封筒を理解すると、分裂赤い封筒の全体的な処理プロセスとインターフェイスは、通常の現金赤い封筒とそれほど変わりません。 、Fission red エンベロープをカプセル化して使用するのは非常に簡単です。
フィッションレッドエンベロープインターフェイスは、企業が個別のWeChatユーザーにフィッションレッドエンベロープを送信するために使用されます
現在、指定されたWeChatユーザーのopenIDへの指定金額のフィッションレッドエンベロープの発行をサポートしています。 (openid を取得するには、WeChat パブリック プラットフォーム開発者ドキュメントを参照してください: 基本的なユーザー情報を取得するための Web ページの認証)
インターフェイス パラメーターとユーザー アプリケーションの実際の効果との対応関係は次のとおりです:
リクエストURL | https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack |
---|---|
証明書は必要ですか | はい(販売者証明書を参照)証明書と使用方法については) |
リクエスト方法 | POST |
以前に紹介したキャッシュレッドエンベロープと同様に、以下に示すように、フィッションレッドエンベロープのパラメータを2つの部分に分割することもできます。1つは通常のパラメータで、もう1つはビジネスパラメータです。
次のパラメータを渡すと、
<xml> <sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign> <mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno> <mch_id><![CDATA[1000888888]]></mch_id> <wxappid><![CDATA[wxcbda96de0b165486]]></wxappid> <send_name><![CDATA[send_name]]></send_name> <re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid> <total_amount><![CDATA[600]]></total_amount> <amt_type><![CDATA[ALL_RAND]]></amt_type> <total_num><![CDATA[3]]></total_num> <wishing><![CDATA[恭喜发财]]></wishing> <act_name><![CDATA[新年红包]]></act_name> <remark><![CDATA[新年红包]]></remark> <nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str> </xml>
上記の受信パラメータが 2 つの部分に送信されます。 : https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack、成功すると次の XML が返されます。
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[发放成功.]]></return_msg> <result_code><![CDATA[SUCCESS]]></result_code> <err_code><![CDATA[0]]></err_code> <err_code_des><![CDATA[发放成功.]]></err_code_des> <mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno> <mch_id>10010404</mch_id> <wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid> <re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid> <total_amount>3</total_amount> <send_time><![CDATA[20150227091010]]></send_time> <send_listid><![CDATA[1000000000201502270093647546]]></send_listid> </xml>
失敗した場合、返される XML には、以下に示すように多くの情報が不足します。
<xml> <return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[系统繁忙,请稍后再试.]]></return_msg> <result_code><![CDATA[FAIL]]></result_code> <err_code><![CDATA[268458547]]></err_code> <err_code_des><![CDATA[系统繁忙,请稍后再试.]]></err_code_des> <mch_billno><![CDATA[0010010404201411170000046542]]></mch_billno> <mch_id>10010404</mch_id> <wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid> <re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid> <total_amount>3</total_amount> </xml>
これらのルールに従って、より使いやすくするために、フィッションレッドエンベロープのインターフェイスと実装コードをカプセル化しました。
たとえば、通常の現金の赤い封筒と核分裂の赤い封筒のエンティティ クラスの同様の特性に基づいて、情報を格納するためのいくつかのクラスを設計しました。以下の図に、受信パラメーターのオブジェクト関係を示します。
同様に、返信された赤封筒の送信結果についても、誤って情報が返された場合と成功した場合の情報を考慮する必要があるため、返信結果のクラス間の関係を以下のように設計しました。
上記の設計思想に基づいて設計したクラスコードは以下の通りです。
/// <summary> /// 发送裂变红包的数据信息 /// </summary> public class SendGroupRedPackJson : BaseRedPackJson { /// <summary> /// 红包金额设置方式 /// ALL_RAND—全部随机,商户指定总金额和红包发放总人数,由微信支付随机计算出各红包金额 /// </summary> public string amt_type { get; set; } public SendGroupRedPackJson() { this.amt_type = "ALL_RAND"; } }
結果オブジェクトクラスのコードは以下の通りです。
/// <summary> /// 发送红包的返回结果 /// </summary> public class SendRedPackResult : PayResult { /// <summary> /// 商户订单号 /// </summary> public string mch_billno { get; set; } /// <summary> /// 商户appid,接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。 /// </summary> public string wxappid { get; set; } /// <summary> /// 接受收红包的用户 /// 用户在wxappid下的openid /// </summary> public string re_openid { get; set; } /// <summary> /// 付款金额,单位分 /// </summary> public int total_amount { get; set; } /// <summary> /// 红包发送时间 /// </summary> public string send_time { get; set; } /// <summary> /// 红包订单的微信单号 /// </summary> public string send_listid { get; set; } }
このように、これらのオブジェクトのコードでは、インターフェイスの説明に従って前のエッセイで紹介したインターフェイス設計方法に従って、核分裂の赤いエンベロープのコード処理を実装します。
/// <summary> /// 微信红包、摇一摇红包的操作API接口 /// </summary> public interface ILotteryApi { /// <summary> /// 用于企业向微信用户个人发现金红包。需要商户证书 /// 目前支持向指定微信用户的openid发放指定金额红包。 /// </summary> /// <returns></returns> SendRedPackResult SendRedPack(SendRedPackJson json); /// <summary> /// 用于企业向微信用户个人发裂变红包。需要商户证书 /// 目前支持向指定微信用户的openid发放指定金额裂变红包。 /// </summary> /// <returns></returns> SendRedPackResult SendGroupRedPack(SendGroupRedPackJson json); .............
そして、それらを実装するインターフェースコードは次のとおりです。
/// <summary> /// 微信红包管理类 /// </summary> public class LotteryApi : ILotteryApi { #region 裂变红包说明 //微信支付裂变红包向微信支付商户开发,具体能力如下: //1、商户调用接口时,通过指定发送金额以及指定一位发送对象的方式发放一组裂变红包 //2、指定发送对象领取到红包后,资金直接进入微信零钱,带给用户微信支付原生的流畅体验 //3、指定发送对象能够将组合中的剩余红包分享给好友,好友可继续领取,形成传播效应,放大企业品牌价值 #endregion /// <summary> /// 用于企业向微信用户个人发裂变红包。需要商户证书 /// 目前支持向指定微信用户的openid发放指定金额裂变红包。 /// </summary> /// <returns></returns> public SendRedPackResult SendGroupRedPack(SendGroupRedPackJson json) { CheckAccount();//检查AccountInfo的对象属性值 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);// 红包发送者名称 //商户订单号(每个订单号必须唯一) 组成:mch_id+yyyymmdd+10位一天内不能重复的数字。 //接口根据商户订单号支持重入,如出现超时可再调用。 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("act_name", json.act_name); data.SetValue("remark", json.remark); data.SetValue("amt_type", json.amt_type); data.SetValue("sign", data.MakeSign(AccountInfo.PayAPIKey));//最后生成签名 var url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack"; return Helper.GetPayResultWithCert<sendredpackresult>(data, url, AccountInfo.CertPath, AccountInfo.CertPassword); } ...............</sendredpackresult>
3. フィッションレッドエンベロープインターフェースの呼び出しと効果の表示
上記では、フィッションレッドエンベロープのインターフェースをカプセル化しましたが、フィッションレッドエンベロープを送信する必要がある場合は、上記のインターフェースを直接呼び出して操作を実現できます。赤い封筒を送る。
たとえば、インターフェースを呼び出すコードは次のとおりです。
//裂变红包 SendGroupRedPackJson groupJson = new SendGroupRedPackJson() { act_name = "恭喜发财", remark = "企业红包", wishing = "企业红包", total_amount = 600, total_num = 4, re_openid = tosendOpenId, //发送给用户的OpenID }; var groupResult = hbApi.SendGroupRedPack(groupJson); message = string.Format("企业发送裂变红包:{0} {1}", groupResult.Success ? "成功" : "失败", groupResult.Message); Console.WriteLine(message); Console.WriteLine(groupResult.ToJson());
hbApiのオブジェクト初期化コードは次のとおりです
ILotteryApi hbApi = new LotteryApi(accountInfo);
最後に、WeChatで送信された核分裂の赤い封筒が表示されます。
送る赤い封筒の金額は1元以上である必要があるため、送る金額が大きい場合、下の図に示すように、各人が受け取る赤い封筒の量は異なります。 。
上記は、現金紅包と核分裂紅包のインターフェースのカプセル化と使用プロセスについてです。WeChat の開発に役立つことを願っています。
WeChat ポータルの C# 開発および WeChat 分裂紅包のアプリケーションに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。