V2MerchantDirectWechatSignRequestDemo.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. using System;
  2. using System.Collections.Generic;
  3. using BasePaySdk;
  4. using BasePaySdk.Request;
  5. using Newtonsoft.Json;
  6. using Newtonsoft.Json.Linq;
  7. namespace BasePayDemo
  8. {
  9. /**
  10. * 微信特约商户进件 - 示例
  11. *
  12. * @author sdk-generator
  13. * @Description
  14. */
  15. public class V2MerchantDirectWechatSignRequestDemo
  16. {
  17. public static void V2MerchantDirectWechatSignRequestDemoTest()
  18. {
  19. // 1. 数据初始化
  20. InitMerConfig.init();
  21. // 2.组装请求参数
  22. V2MerchantDirectWechatSignRequest request = new V2MerchantDirectWechatSignRequest();
  23. // 请求流水号
  24. request.setReqSeqId(DateTime.Now.ToString("yyy-MM-dd HH.mm.ss.fff"));
  25. // 请求日期
  26. request.setReqDate(DateTime.Now.ToString("yyyyMMdd"));
  27. // 商户汇付Id
  28. request.setHuifuId("6666000003134509");
  29. // 渠道商汇付Id
  30. request.setUpperHuifuId("6666000003134508");
  31. // 开发者的应用ID
  32. request.setAppId("20200506780602902");
  33. // 商户号
  34. request.setMchId("748851385");
  35. // 经营者/法人是否为受益人
  36. request.setOwner("Y");
  37. // 超级管理员信息
  38. request.setContactInfo(getContactInfo());
  39. // 经营场景类型
  40. request.setSalesScenesType("SALES_SCENES_STORE,SALES_SCENES_MP,SALES_SCENES_MINI_PROGRAM,SALES_SCENES_WEB,SALES_SCENES_APP,SALES_SCENES_WEWORK");
  41. // 经营场景
  42. request.setSalesInfo(getSalesInfo());
  43. // 结算信息
  44. request.setSettlementInfo(getSettlementInfo());
  45. // 设置非必填字段
  46. Dictionary<string, object> extendInfoMap = getExtendInfos();
  47. request.setExtendInfo(extendInfoMap);
  48. try {
  49. // 3. 发起API调用
  50. // 调用接口,使用默认商户配置时可省略配置key
  51. Dictionary<string, Object> result = null;
  52. result = BasePayClient.postRequest(request,null);
  53. // 使用指定配置调用接口
  54. // result = BasePayClient.postRequest(request,null,"merchantKey2");
  55. Console.WriteLine(JsonConvert.SerializeObject(result));
  56. }
  57. catch (Exception ex) {
  58. Console.WriteLine(ex);
  59. }
  60. }
  61. /**
  62. * 非必填字段
  63. * @return
  64. */
  65. private static Dictionary<string, object> getExtendInfos() {
  66. // 设置非必填字段
  67. Dictionary<string, object> extendInfoMap = new Dictionary<string, object>();
  68. // 服务商微信公众号APPID对应密钥
  69. extendInfoMap.Add("wx_woa_secret", "1234567890");
  70. // 公司类型
  71. extendInfoMap.Add("ent_type", "2");
  72. // 登记证书
  73. extendInfoMap.Add("certificate_info", getCertificateInfo());
  74. // 最终受益人信息
  75. extendInfoMap.Add("ubo_info", getUboInfo());
  76. // 银行账户信息
  77. extendInfoMap.Add("bank_account_info", getBankAccountInfo());
  78. // 补充说明
  79. extendInfoMap.Add("business_addition_msg", "补充说明");
  80. // 文件列表
  81. extendInfoMap.Add("file_list", getFileList());
  82. return extendInfoMap;
  83. }
  84. private static string getContactInfo() {
  85. Dictionary<string, object> obj = new Dictionary<string, object>();
  86. // 超级管理员姓名
  87. obj.Add("contact_name", "超级管理员姓名7586");
  88. // 超级管理员证件号码&lt;font color&#x3D;&quot;green&quot;&gt;示例值:320926198512025834&lt;/font&gt;&lt;br/&gt;1、“超级管理员证件号码”与“超级管理员微信openid”,二选一必填。&lt;br/&gt;2、超级管理员签约时,校验微信号绑定的银行卡实名信息,是否与该证件号码一致。&lt;br/&gt;3、可传身份证、来往内地通行证、来往大陆通行证、护照等证件号码。
  89. obj.Add("contact_cert_no", "530102198206242725");
  90. // 超级管理员微信openid&lt;font color&#x3D;&quot;green&quot;&gt;示例值:oGhiSxIAPtEnPfe9Xo000000A&lt;/font&gt;&lt;br/&gt;1、“超级管理员身份证件号码”与“超级管理员微信openid”,二选一必填。&lt;br/&gt;2、超级管理员签约时,校验微信号是否与该微信openid一致。
  91. obj.Add("openid", "openid");
  92. // 超级管理员手机号
  93. obj.Add("contact_mobile_no", "13778851762");
  94. // 超级管理员电子邮箱
  95. obj.Add("contact_email", "89007865@qq.com");
  96. // 超级管理员证件类型
  97. obj.Add("cert_type", "00");
  98. return JsonConvert.SerializeObject(obj);
  99. }
  100. private static string getFileList() {
  101. Dictionary<string, object> obj = new Dictionary<string, object>();
  102. // 文件类型
  103. obj.Add("file_type", "F85");
  104. // 文件jfileID
  105. obj.Add("file_id", "42204258-967e-373c-88d2-1afa4c7bb8ef");
  106. // 文件名称
  107. obj.Add("file_name", "微信直连额外补充材料一");
  108. JArray objList = new JArray();
  109. objList.Add(JToken.FromObject(obj));
  110. return JsonConvert.SerializeObject(objList);
  111. }
  112. private static string getCertificateInfo() {
  113. Dictionary<string, object> obj = new Dictionary<string, object>();
  114. // 登记证书类型
  115. obj.Add("cert_type", "所有场景类型");
  116. // 证书号
  117. obj.Add("cert_no", "证书号");
  118. // 证书商户名称
  119. obj.Add("cert_mer_name", "证书商户名称");
  120. // 注册地址
  121. obj.Add("reg_detail", "注册地址");
  122. // 法人姓名
  123. obj.Add("legal_name", "法人姓名");
  124. // 证书有效期类型
  125. obj.Add("cert_validity_type", "1");
  126. // 证书有效期开始日期
  127. obj.Add("cert_begin_date", "20200420");
  128. // 文件列表
  129. // obj.Add("file_list", getFileList());
  130. // 证书有效期截止日期
  131. obj.Add("cert_end_date", "20400420");
  132. return JsonConvert.SerializeObject(obj);
  133. }
  134. private static string getUboInfo() {
  135. Dictionary<string, object> obj = new Dictionary<string, object>();
  136. // 证件类型
  137. obj.Add("cert_type", "00");
  138. // 证件号码
  139. obj.Add("cert_no", "530102198206242725");
  140. // 姓名
  141. obj.Add("name", "姓名");
  142. // 证件有效类型
  143. obj.Add("cert_validity_type", "1");
  144. // 证件有效期开始日期
  145. obj.Add("cert_begin_date", "20200420");
  146. // 文件列表
  147. obj.Add("file_list", getFileList());
  148. // 证件有效期截止日期
  149. obj.Add("cert_end_date", "20400420");
  150. return JsonConvert.SerializeObject(obj);
  151. }
  152. private static string getSalesInfo() {
  153. Dictionary<string, object> obj = new Dictionary<string, object>();
  154. // 服务商公众号APPID公众号场景必传(与mp_sub_appid二选一) 。可填写当前服务商商户号已绑定的公众号APPID。&lt;font color&#x3D;&quot;green&quot;&gt;示例值:wx5934540532 &lt;/font&gt;
  155. obj.Add("mp_appid", "服务商公众号APPID");
  156. // 商家公众号APPID公众号场景必传(与mp_appid二选一)。&lt;font color&#x3D;&quot;green&quot;&gt;示例值:wx5934540532 &lt;/font&gt; &lt;br/&gt;1、可填写与商家主体一致且已认证的公众号APPID,需是 已认证的服务号、政府或媒体类型的订阅号。&lt;br/&gt;2、审核通过后,系统将发起特约商家商户号与该AppID的 绑定(即配置为sub_appid),服务商随后可在发起支付时 选择传入该appid,以完成支付,并获取sub_openid用于数 据统计,营销等业务场景 。
  157. obj.Add("mp_sub_appid", "商家公众号APPID");
  158. // 服务商小程序APPID小程序场景必传(与mmini_program_sub_appid二选一)。 可填写当前服务商商户号已绑定的小程序APPID。&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:wx852a790f100000fe&lt;/font&gt;
  159. obj.Add("mini_program_appid", "服务商小程序APPID");
  160. // 商家小程序APPID小程序场景必传(与mini_program_appid二选一),&lt;font color&#x3D;&quot;green&quot;&gt;示例值:wx852a790f100000fe&lt;/font&gt; &lt;br/&gt;1、可填写与商家主体一致且已认证的小程序APPID,需是 已认证的小程序。&lt;br/&gt; 2、审核通过后,系统将发起特约商家商户号与该AppID的 绑定(即配置为sub_appid),服务商随后可在发起支付时 选择传入该appid,以完成支付,并获取sub_openid用于数 据统计,营销等业务场景。
  161. obj.Add("mini_program_sub_appid", "商家小程序APPID");
  162. // 服务商应用APPIDAPP场景必传(与 app_sub_appid 二选一)。&lt;font color&#x3D;&quot;green&quot;&gt;示例值:wx852a790f100000fe&lt;/font&gt;&lt;br/&gt; 可填写当前服务商商户号已绑定的应用APPID。
  163. obj.Add("app_appid", "服务商应用APPID");
  164. // 商家应用APPIDAPP场景必传(与app_appid二选一);&lt;font color&#x3D;&quot;green&quot;&gt;示例值:wx852a790f100000fe&lt;/font&gt; &lt;br/&gt;1、可填写与商家主体一致且已认证的应用APPID,需是已 认证的APP。 &lt;br/&gt;2、审核通过后,系统将发起特约商家商户号与该AppID的 绑定(即配置为sub_appid),服务商随后可在发起支付时 选择传入该appid,以完成支付,并获取sub_openid用于数 据统计,营销等业务场景。
  165. obj.Add("app_sub_appid", "商家应用APPID");
  166. // 文件列表
  167. obj.Add("file_list", getFileList());
  168. // 门店名称
  169. obj.Add("biz_store_name", "门店名称");
  170. // 门店省市编码
  171. obj.Add("biz_address_code", "门店省市编码");
  172. // 门店地址
  173. obj.Add("biz_store_address", "门店地址");
  174. // 线下场所对应的商家APPID
  175. obj.Add("biz_sub_appid", "线下场所对应的商家APPID");
  176. // 互联网网站域名
  177. obj.Add("domain", "互联网网站域名");
  178. // 互联网网站对应的商家APPID
  179. obj.Add("web_appid", "互联网网站对应的商家APPID");
  180. // 商家企业微信CorpID
  181. obj.Add("sub_corp_id", "商家企业微信CorpID");
  182. return JsonConvert.SerializeObject(obj);
  183. }
  184. private static string getSettlementInfo() {
  185. Dictionary<string, object> obj = new Dictionary<string, object>();
  186. // 入驻结算规则ID
  187. obj.Add("settlement_id", "716");
  188. // 所属行业
  189. obj.Add("qualification_type", "餐饮");
  190. // 文件列表
  191. obj.Add("file_list", getFileList());
  192. // 优惠费率活动ID
  193. obj.Add("activities_id", "20191030111cff5b5e");
  194. // 优惠费率活动值
  195. obj.Add("activities_rate", "0.60");
  196. return JsonConvert.SerializeObject(obj);
  197. }
  198. private static string getBankAccountInfo() {
  199. Dictionary<string, object> obj = new Dictionary<string, object>();
  200. // 账户类型
  201. obj.Add("bank_account_type", "BANK_ACCOUNT_TYPE_CORPORATE");
  202. // 开户名称
  203. obj.Add("account_name", "门店名称");
  204. // 开户银行
  205. obj.Add("account_bank", "中国农业银行");
  206. // 开户银行省市编码
  207. obj.Add("bank_address_code", "01030000");
  208. // 开户银行联行号1、17家直连银行无需填写,如为其他银行,则开户银行全称(含支行)和开户银行联行号二选一。&lt;br/&gt;2、详细参见[开户银行全称(含支行)对照表](https://pay.weixin.qq.com/wiki/doc/apiv3/terms_definition/chapter1_1_3.shtml#part-6)。&lt;font color&#x3D;&quot;green&quot;&gt;示例值:102100020270&lt;/font&gt;
  209. obj.Add("bank_branch_id", "102110001296");
  210. // 开户银行全称(含支行)1、17家直连银行无需填写,如为其他银行,则开户银行全称(含支行)和 开户银行联行号二选一。&lt;br/&gt;2、需填写银行全称,&lt;font color&#x3D;&quot;green&quot;&gt;示例值:中国工商银行北京海运仓支行&lt;/font&gt;,详细参见[开户银行全称(含支行)对照表](https://pay.weixin.qq.com/wiki/doc/apiv3/terms_definition/chapter1_1_3.shtml#part-6)。
  211. obj.Add("bank_name", "102110001296");
  212. // 银行账号
  213. obj.Add("account_number", "102110001296");
  214. return JsonConvert.SerializeObject(obj);
  215. }
  216. }
  217. }