지난 에세이에 이어 위챗 프레임워크 전체를 개선 및 재구축한 후 위챗결제, 기업결제, 현금빨간봉투, 상품권, 각종 카드쿠폰 등이 패키지화되었으며, 위챗결제도 포함되어 쉐이크빨간봉투 부분이 공통적으로 적용됩니다 공식 계정과 기업 계정의 일부입니다. 이러한 결제 관련 인터페이스는 공식 계정과 기업 계정에서 호출할 수 있습니다. 일련의 최적화 및 정렬을 거쳐 이러한 콘텐츠가 하나씩 추가될 예정입니다. 모두가 좋아하고 지원해 주시기 바랍니다.
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# 패키지 는 기업이 개별 WeChat 사용자에게 빨간 봉투를 보내는 데 사용됩니다. 지정된 WeChat 사용자의 공개 ID에 지정된 금액의 봉투.
현금 빨간 봉투는 WeChat의 가맹점 백엔드를 통해 발행할 수 있지만 WeChat에서 제공하는 인터페이스 API를 사용하여 현금 빨간 봉투를 보낼 수도 있습니다.
필드 이름 | 필드 | 필수 | 값 예시 | 유형 | 설명|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
임의의 문자열 | nonce_str | 는 | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 문자열(32) | 32자 이하의 임의 문자열 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
서명 | sign td> | 예 | C380BEC2BFD727A4B6845133519F3AD6 | String(32) | 자세한 내용은 서명 생성 알고리즘 참조 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
판매자 주문 번호 | mch_billno | 예 | 10000098201411111234567890 | 문자열(28) |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
판매자 번호 | 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 | 예 | oxTWIuGaIt6gTKsQRLau2M0yL16EString(32) | 빨간 봉투를 수락한 사용자wxappid 아래 사용자의 openid | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
결제 금액 | total_amount | 예 | 1000 | int | 결제 금액, 단위 포인트 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
빨간 봉투를 받은 총 인원수 | total_num | 는 | 1 | int빨간 봉투를 받은 총 사람 수total_num=1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
소원 | 네 | 등불 수수께끼 맞추기 활동에 참여해 주셔서 감사드리며 행복한 등불 축제가 되길 바랍니다! | String(128) | 빨간 봉투 축복 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IP 주소 | client_ip | 예192.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# 코드 캡슐화를 구현하는 방법을 결정해야 합니다. 먼저 아래와 같이 필요한 인터페이스와 클래스를 정의합니다.
위의 인터페이스 설명을 분석해 보면 일부 인터페이스는 기존 매개변수, 즉 일반 공용 계정이나 기업 계정의 신원 정보가 고정되어 있음을 알 수 있으며, 일부는 비즈니스 매개변수이므로 별도로 분리하여 인터페이스를 캡슐화하고 사용하는 데 도움이 됩니다. 비즈니스 정보의 경우 엔터티 클래스를 정의하여 데이터를 수행할 수 있습니다. 저장 및 교환.
은 아래 인터페이스 설명과 같이 위 그림의 고정된 기존 매개변수에 해당합니다.
따라서 이 정보를 계정에서 설정하고 얻을 수 있으며 관리 백그라운드에서 구성한 다음 코드 로직에서 꺼내 사용할 수 있습니다.
위의 소개에 따르면 레드 패킷 인터페이스 코드를 다음과 같이 정의할 수 있습니다.
/// <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 보안] 프로젝트에서 인증서를 다운로드하세요.
인증서 다운로드 후, Windows 환경에서는 일반적으로 더블클릭을 하여 설치하고, 비밀번호에 필요한 가맹점 번호를 입력해야 합니다.
코드에서 인증서 클래스를 사용하여
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());
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);
WeChat 포털 및 애플리케이션의 C# 개발, WeChat 현금 빨간 봉투의 캡슐화 및 사용에 대한 자세한 내용은 PHP 중국어 웹사이트에서 관련 기사를 주목하세요!