> 위챗 애플릿 > 위챗 개발 > C# WeChat 포털 개발 및 캡슐화 적용 및 WeChat 현금 빨간 봉투 사용

C# WeChat 포털 개발 및 캡슐화 적용 및 WeChat 현금 빨간 봉투 사용

高洛峰
풀어 주다: 2017-03-07 09:54:23
원래의
2333명이 탐색했습니다.

지난 에세이에 이어 위챗 프레임워크 전체를 개선 및 재구축한 후 위챗결제, 기업결제, 현금빨간봉투, 상품권, 각종 카드쿠폰 등이 패키지화되었으며, 위챗결제도 포함되어 쉐이크빨간봉투 부분이 공통적으로 적용됩니다 공식 계정과 기업 계정의 일부입니다. 이러한 결제 관련 인터페이스는 공식 계정과 기업 계정에서 호출할 수 있습니다. 일련의 최적화 및 정렬을 거쳐 이러한 콘텐츠가 하나씩 추가될 예정입니다. 모두가 좋아하고 지원해 주시기 바랍니다.

1. 현금 빨간 봉투의 개념과 용도

1) 사용 시나리오

WeChat Pay 현금 빨간 봉투는 WeChat Pay 판매자를 위해 개발되었습니다. 구체적인 기능은 다음과 같습니다.

◆ 가맹점이 인터페이스를 호출하면 전송 대상과 전송 금액을 지정하여 빨간 봉투를 발행합니다. 이 방법을 사용하면 가맹점에서 다양한 풍부한 활동 시나리오에 유연하게 적용할 수 있습니다. 🎜>

◆ 수집 빨간 봉투를 받은 후 사용자의 자금은 WeChat 변경으로 직접 이체되어 복잡한 보상 절차를 피하고 사용자에게 WeChat 결제의 원활한 경험을 제공합니다

2) WeChat 빨간 봉투 발송 규칙

발송 빈도 규칙

◆ 분당 발송되는 빨간 봉투의 개수는 1800개를 초과할 수 없습니다. >

◆ 동일한 판매자 번호, 분당 발송할 수 있는 최대 빨간 봉투 수

빨간 봉투 규칙

◆ 빨간 봉투 한 장의 금액은 [1.00 위안, 200.00 위안] 사이입니다.

◆ 동일한 빨간 봉투는 한 명의 사용자에게만 보낼 수 있습니다. (위의 규칙이 귀하의 요구 사항을 충족하지 못하는 경우 이메일을 보내주십시오. 업그레이드 안내는 wxhongbao@tencent.com으로 보내주세요)

◆ 빨간 봉투가 발급된 후 72시간 이내에 수령하지 않으면 환불 처리됩니다

3) WeChat 빨간 봉투 인터페이스 호출 프로세스

◆ 백그라운드 API 호출: 공동 디버깅 프로세스에 들어갈 때 개발과 자세히 통신합니다.

◆ 서버에 알림: 서버에 알립니다. WeChat 빨간 봉투를 받은 사용자의 openID를 입력하고 사용자가 받은 금액을 서버에 알립니다.

◆ 기업 계좌에서 돈을 차감: 서버가 정보를 얻은 후 해당 금액을 차감합니다. 해당 기업계좌에서 돈을 받아 해당금액을 받아

◆ 통화실패 : 송금규칙 미준수, 기업계좌 잔액부족 등으로 인해 통화가 실패되고, 발신자에게 피드백이 갑니다.

◆ 전송 성공: WeChat 빨간 봉투를 일반에 보냅니다. 계정이 해당 사용자에게 해당 빨간 봉투를 보냅니다. 🎜>

2. 현금 빨간 봉투

API

인터페이스 설명 및 C# 패키지

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

는 기업이 개별 WeChat 사용자에게 빨간 봉투를 보내는 데 사용됩니다. 지정된 WeChat 사용자의 공개 ID에 지정된 금액의 봉투.


현금 빨간 봉투는 WeChat의 가맹점 백엔드를 통해 발행할 수 있지만 WeChat에서 제공하는 인터페이스 API를 사용하여 현금 빨간 봉투를 보낼 수도 있습니다.

인터페이스 호출 요청 설명



요청 매개변수


설명 oxTWIuGaIt6gTKsQRLau2M0yL16Eint빨간 봉투의 축복 예
필드 이름 필드 필수 값 예시 유형
임의의 문자열 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 문자열(32) 32자 이하의 임의 문자열
서명 sign td> C380BEC2BFD727A4B6845133519F3AD6 String(32) 자세한 내용은 서명 생성 알고리즘 참조
판매자 주문 번호 mch_billno 10000098201411111234567890 문자열(28)
字段名 字段 必填 示例值 类型 说明
随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
签名 sign C380BEC2BFD727A4B6845133519F3AD6 String(32) 详见签名生成算法
商户订单号 mch_billno 10000098201411111234567890 String(28)

商户订单号(每个订单号必须唯一)

组成:mch_id+yyyymmdd+10位一天内不能重复的数字。

接口根据商户订单号支持重入,如出现超时可再调用。

商户号 mch_id 10000098 String(32) 微信支付分配的商户号
公众账号appid wxappid wx8888888888888888 String(32) 微信分配的公众账号ID(企业号corpid即为此appId)。接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。
商户名称 send_name 天虹百货 String(32) 红包发送者名称
用户openid re_openid oxTWIuGaIt6gTKsQRLau2M0yL16E String(32)

接受红包的用户

用户在wxappid下的openid

付款金额 total_amount 1000 int 付款金额,单位分
红包发放总人数 total_num 1 int

红包发放总人数

total_num=1

红包祝福语 wishing 感谢您参加猜灯谜活动,祝您元宵节快乐! String(128) 红包祝福语
Ip地址 client_ip 192.168.0.1 String(15) 调用接口的机器Ip地址
活动名称 act_name 猜灯谜抢红包活动 String(32) 活动名称
备注 remark 猜越多得越多,快来抢! String(256) 备注信息
판매자 주문 번호(각 주문 번호는 고유해야 함) 는 mch_id+yyyymmdd+10자리로 구성되며 하루 이내에 반복될 수 없습니다. 가맹점 주문번호에 따른 재입장을 지원하는 인터페이스로 타임아웃이 발생하면 다시 호출할 수 있습니다.
판매자 번호 mch_id 10000098 String(32) WeChat 결제로 할당된 판매자 번호
공용 계정 앱 ID wxappid wx8888888888888888 String(32) WeChat에서 할당한 공개 계정 ID(회사 번호 corpid는 이 appId입니다). 인터페이스를 통해 전달된 모든 appid는 APP의 appid(open.weixin.qq.com에 적용)가 아닌 공개 계정의 appid(mp.weixin.qq.com에 적용)여야 합니다.
판매자 이름 send_name is Tinhong 백화점 문자열 ( 32) 빨간 봉투 보낸 사람 이름
사용자 공개 ID re_openid String(32) 빨간 봉투를 수락한 사용자wxappid 아래 사용자의 openid
결제 금액 total_amount 1000 int 결제 금액, 단위 포인트
빨간 봉투를 받은 총 인원수 total_num 1빨간 봉투를 받은 총 사람 수total_num=1
소원 등불 수수께끼 맞추기 활동에 참여해 주셔서 감사드리며 행복한 등불 축제가 되길 바랍니다! String(128) 빨간 봉투 축복
IP 주소 client_ip192.168.0.1 String(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#开发微信门户及应用微信现金红包的封装及使用

위의 인터페이스 설명을 분석해 보면 일부 인터페이스는 기존 매개변수, 즉 일반 공용 계정이나 기업 계정의 신원 정보가 고정되어 있음을 알 수 있으며, 일부는 비즈니스 매개변수이므로 별도로 분리하여 인터페이스를 캡슐화하고 사용하는 데 도움이 됩니다. 비즈니스 정보의 경우 엔터티 클래스를 정의하여 데이터를 수행할 수 있습니다. 저장 및 교환.

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 보안] 프로젝트에서 인증서를 다운로드하세요.

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#开发微信门户及应用微信现金红包的封装及使用

WeChat 포털 및 애플리케이션의 C# 개발, WeChat 현금 빨간 봉투의 캡슐화 및 사용에 대한 자세한 내용은 PHP 중국어 웹사이트에서 관련 기사를 주목하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿