WeChat ポータルの C# 開発、カプセル化のアプリケーション、WeChat 現金封筒の使用

高洛峰
リリース: 2017-03-07 09:54:23
オリジナル
2193 人が閲覧しました

最後のエッセイの後、WeChatフレームワーク全体を改善して再構築した後、WeChat支払い、企業支払い、現金紅包、バウチャー、各種カードのパッケージ化が完了し、WeChat支払いとシェイクなどのコンテンツが含まれています部分は公式アカウントとエンタープライズアカウントの共通部分です。一連の最適化と並べ替えを経て、これらの支払い関連のインターフェイスが 1 つずつ導入されます。みんなが気に入ってサポートしてくれることを願っています。

1. 現金赤い封筒の概念と使用法

1) 使用シナリオ

WeChat Pay 現金赤い封筒は、WeChat Pay 加盟店向けに開発されています:

◆ 販売者がインターフェースを呼び出すとき。 、送信オブジェクトと送信金額を指定するこの方法により、販売者はさまざまな豊富なアクティビティシナリオに柔軟に適用できます

◆ 赤い封筒を受け取った後、ユーザーの資金はWeChatの変更に直接転送されます。複雑な授与プロセスを回避し、ユーザーに WeChat 決済をネイティブに提供します

2) WeChat 赤い封筒の送信ルール

送信頻度のルール

◆ 1 分間に送信される赤い封筒の数は 1800 を超えてはなりません

◆ 同じ販売者アカウントは、1 分間に同じ人にのみ送信できます。

赤い封筒のルール

◆ 1 つの赤い封筒の金額は [1.00 元、200.00 元] です。

◆ 同じ赤い封筒は 1 人のユーザーにのみ送信できます (上記のルールが要件を満たしていない場合、必要に応じて、アップグレード手順について wxhongbao@tencent.com に電子メールを送信してください)

◆ 赤い封筒が発行後 72 時間経過しても請求されなかった場合、払い戻しが行われます

3) WeChat 赤封筒インターフェイス呼び出しプロセス

◆ バックエンド API 呼び出し: 共同デバッグ プロセスに入るときに開発と詳細に通信します

。 ◆ サーバーに通知: WeChat 赤い封筒を受け取ったユーザーの openID をサーバーに通知し、ユーザーが受け取った金額をサーバーに通知します

◆ ビジネスアカウントからお金を差し引く: サーバーは、アカウントから情報を取得します。相当額がビジネスアカウントから差し引かれます。

◆ 通話失敗:送信ルール違反、ビジネスアカウントの残高不足などにより通話が失敗し、発信者にフィードバックが送信されます。

◆ 送信成功: WeChat 赤い封筒の公開アカウントを使用して、対応する赤い封筒を対応するユーザーに送信します

C#开发微信门户及应用微信现金红包的封装及使用


2. 現金赤い封筒APIインターフェースの説明とC#パッケージ

が使用されます。現在、指定された WeChat ユーザーの openID への指定金額の赤い封筒の発行をサポートしています。

現金赤い封筒は WeChat の販売者バックエンドを通じて発行できますが、WeChat が提供するインターフェイス API を使用して現金赤い封筒を送信することもできます。


インターフェース通話リクエストの説明


リクエストURLですか証明書は必要ですか?


リクエストパラメータ


https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredパック
赤い封筒の祝福はランタンのなぞなぞ当てアクティビティにご参加いただきありがとうございます。ランタン フェスティバルが最高のものになることを祈っています。 String(128)赤い封筒の祝福IPアドレスclient_ipは192.168.0.1String(15)インターフェイスを呼び出すマシンのIPアドレスですイベント名 act_nameはランタンの謎を推測して赤い封筒をつかむアクティビティString(32)アクティビティ名備考備考は推測するほど、 、来てくださいそしてそれを掴んでください! 文字列(256)備考

データの例:


<xml><xml> 
  <sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign>  
  <mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>  
  <mch_id><![CDATA[888]]></mch_id>  
  <wxappid><![CDATA[wxcbda96de0b165486]]></wxappid>  
  <send_name><![CDATA[send_name]]></send_name>  
  <re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid>  
  <total_amount><![CDATA[200]]></total_amount>  
  <total_num><![CDATA[1]]></total_num>  
  <wishing><![CDATA[恭喜发财]]></wishing>  
  <client_ip><![CDATA[127.0.0.1]]></client_ip>  
  <act_name><![CDATA[新年红包]]></act_name>  
  <remark><![CDATA[新年红包]]></remark>  
  <nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str> 
  </xml>
ログイン後にコピー

一般に、これらに基づいて C# コードのカプセル化を実装する方法を決定する必要があります。以下に示すような と クラスが必要です。

C#开发微信门户及应用微信现金红包的封装及使用

上記のインターフェイスの説明を分析すると、一部のインターフェイスは固定の従来のパラメーター、つまり一般公開アカウントまたは企業アカウントの ID 情報であり、一部はビジネスパラメーターであることがわかります。そのため、それらを個別に分離します。これにより、インターフェイスをカプセル化して使用することができ、ビジネス情報の場合は、データを保存および交換するためのエンティティ クラスを定義できます。

C#开发微信门户及应用微信现金红包的封装及使用

は、上図の従来の固定パラメータに対応しており、以下のインターフェイスの説明に示されています。

C#开发微信门户及应用微信现金红包的封装及使用

したがって、この情報をアカウントから設定して取得し、管理バックグラウンドで設定し、それを取り出してコードロジックで使用できます。

C#开发微信门户及应用微信现金红包的封装及使用

C#开发微信门户及应用微信现金红包的封装及使用

上記の紹介によれば、赤いエンベロープインターフェイスコードを次のように定義できます。

/// <summary>
    /// 微信红包(摇一摇红包)操作API
    /// </summary>
    public interface ILotteryApi
    {              
        /// <summary>
        /// 用于企业向微信用户个人发现金红包。需要商户证书
        /// 目前支持向指定微信用户的openid发放指定金额红包。
        /// </summary>
        /// <returns></returns>
        SendRedPackResult SendRedPack(SendRedPackJson json);
ログイン後にコピー

その中で、SendRedPackJsonは、インターフェースを介した情報の転送を容易にするために、情報を運ぶクラスを定義しました。

/// <summary>
    /// 现金红包和裂变红包的基础信息
    /// </summary>
    public class BaseRedPackJson
    {
        /// <summary>
        /// 接受红包的用户
        /// 用户openid    
        /// </summary>
        public string re_openid { get; set; }

        /// <summary>
        /// 付款金额,单位分
        /// </summary>
        public int total_amount { get; set; }

        /// <summary>
        /// 红包发放总人数
        /// </summary>
        public int total_num { get; set; }

        /// <summary>
        /// 红包祝福语
        /// </summary>
        public string wishing { get; set; }

        /// <summary>
        /// 活动名称
        /// </summary>
        public string act_name { get; set; }

        /// <summary>
        /// 备注信息
        /// </summary>
        public string remark { get; set; }
    }

    /// <summary>
    /// 发送红包的数据信息
    /// </summary>
    public class SendRedPackJson :BaseRedPackJson
    {
        /// <summary>
        /// 调用接口的机器Ip地址
        /// </summary>
        public string client_ip { get; set; }

        public SendRedPackJson()
        {
            this.total_num = 1;//红包发放总人数
        }
    }
ログイン後にコピー

上記のパラメータの定義に従って、具体的なコードは次のとおりです。主に通常のパラメータとビジネスパラメータを渡します。インターフェイスのアドレスを呼び出します。 データを送信 (POST) し、返された結果を取得して解析します。

/// <summary>
        /// 用于企业向微信用户个人发现金红包。需要商户证书
        /// 目前支持向指定微信用户的openid发放指定金额红包。
        /// </summary>
        /// <returns></returns>
        public SendRedPackResult SendRedPack(SendRedPackJson 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("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<SendRedPackResult>(data, url, AccountInfo.CertPath, AccountInfo.CertPassword);
        }
ログイン後にコピー

赤い封筒を送信する操作には証明書が必要なので、対応する証明書を WeChat 販売者プラットフォームからダウンロードする必要があります。

開発環境で使用するために、マーチャントバックエンドの [API Security] プロジェクトから証明書をダウンロードします。

C#开发微信门户及应用微信现金红包的封装及使用

Windows 環境では、証明書をダウンロードした後、通常、ダブルクリックしてインストールし、必要な加盟店番号をパスワードとして入力する必要があります。

C#开发微信门户及应用微信现金红包的封装及使用

コードでは、証明書クラスを使用して

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);
ログイン後にコピー

3. WeChat の赤い封筒を使用した結果

たとえば、テスト例で呼び出すコードは次のとおりです。が続きます。

//现金红包
                SendRedPackJson packJson = new SendRedPackJson()
                {
                    act_name = "恭喜发财",
                    client_ip = NetworkUtil.GetIPAddress(),
                    remark = "企业红包",
                    wishing = "企业红包",
                    total_amount = 100,
                    total_num = 1,
                    re_openid = tosendOpenId //发送给用户的OpenID
                };
                var result = hbApi.SendRedPack(packJson);
                var message = string.Format("企业发送红包:{0} {1}", result.Success ? "成功" : "失败", result.Message);
                Console.WriteLine(message);
                Console.WriteLine(result.ToJson());
ログイン後にコピー

hbApi は、次のコードに示すように、上記のインターフェイスの構造です。

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);
ログイン後にコピー

通話が成功すると、公式アカウントの会話で赤い封筒の情報結果が表示されます。 以下は、赤い封筒を送信して開封するまでの全体的なプロセスです。

C 多

C#开发微信门户及应用微信现金红包的封装及使用 C#开发微信门户及应用微信现金红包的封装及使用 C#develop WeChat ポータルと WeChat 現金赤い封筒のパッケージと関連記事については、PHP 中国語 Web サイトを参照してください。 C#开发微信门户及应用微信现金红包的封装及使用

フィールド名 フィールド 必須 値の例 タイプ 説明
ランダム文字列 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 32ビット以下のランダムな文字列
signature sign is C3 80BEC2BFD727A4B6845133519F3AD6 String(32) 詳細については署名生成アルゴリズムを参照
販売者注文番号 mch_billno 1000009820141111234567890 文字列(28)

販売者注文番号(各注文番号は一意である必要があります)

構成: mch_id+yyyymmdd+10 桁を範囲内で繰り返すことはできませんある日の数字。

インターフェイスは、販売者の注文番号に基づいた再入力をサポートしており、タイムアウトが発生した場合は、再度呼び出すことができます。

販売者番号 mch_id 10000098 String(32) WeChat決済によって割り当てられた販売者番号
パブリックアカウントappid wxアプリID wx8888888888888888 String( 32) WeChat によって割り当てられた公開アカウント ID (企業番号 corpid はこの appId です)。インターフェイスを通じて渡されるすべての appid は、APP の appid (open.weixin.qq.com で適用) ではなく、公式アカウント (mp.weixin.qq.com で適用) の appid である必要があります。
販売者名 send_name 天虹百貨店 String(32) 赤い封筒送信者名
user openid re_openid oxTWIuGaIt6gTKsQRLau2M0yL16E String(32)

赤い封筒を受け取るユーザー

wxappid の下のユーザーの openid

支払い金額 total_amount 1000 int 支払い金額、単位ポイント
合計赤い封筒を配った人の数 total_num 1 int

赤い封筒を配った人の総数

total_num=1

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!