Willkommen, Nachrichten zu hinterlassen und weiterzuleiten
Artikelserie zur WeChat-Geschwindigkeitsentwicklung: Klicken Sie hier
In den vorherigen Artikeln wurde die WeChat-Zahlung eingeführt. Offizielle Kontozahlung, WeChat-Scancode-Zahlung, Kartenzahlung, WeChat-Zahlung
In diesem Artikel geht es um die Zahlungstools bei WeChat-Händlern – bargeldrote Umschläge
[Offizielles Dokument]
1. Berechtigungen für Cash Red Envelope aktivieren
In Verwendung Bevor Sie Bargeldumschläge erhalten, aktivieren Sie bitte die Funktion für Bargeldumschläge. Vorgangspfad: [Anmelden bei der WeChat Payment Merchant Platform——>Product Center——>Cash Red Envelope——>Aktivieren].
2. Laden Sie das APIZertifikat herunter
Wenn ein Händler die WeChat Red Packet-Schnittstelle aufruft, führt der Server die Zertifikatsüberprüfung durch Zertifikat auf der Händlerplattform
Jemand möchte fragen, welches für so viele Zertifikate verwendet werden soll? Hat es etwas mit der Entwicklungssprache zu tun?
Welche Sprache verwendet welches Zertifikat und wie wird es verwendet? Bitte beachten Sie 证书说明.txt
im Screenshot. Der Inhalt lautet wie folgt:
欢迎使用微信支付! 微信支付API共四份(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书),为接口中强制要求时需携带的证书文件。 证书属于敏感信息,请妥善保管不要泄露和被他人复制。 不同开发语言下的证书格式不同,以下为说明指引: 证书pkcs12格式(apiclient_cert.p12) 包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份 部分安全性要求较高的API需要使用该证书来确认您的调用身份 windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户ID(如:10010000) 证书pem格式(apiclient_cert.pem) 从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem 证书密钥pem格式(apiclient_key.pem) 从apiclient_cert.p12中导出密钥部分的文件,为pem格式 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem CA证书(rootca.pem) 微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性 该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性 某些环境和工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用
3. Aufladen
Bevor Sie bargeldlose Umschläge ausstellen, stellen Sie bitte sicher, dass Sie über ausreichend Guthaben verfügen. Sollte es nicht ausreichen, füllen Sie bitte nach. Vorgangspfad: [Anmelden bei der Händlerplattform –>Kontocenter –>Fondsverwaltung –>Aufladen]
Der durchschnittliche Betrag jedes roten Umschlags muss zwischen 1,00 Yuan und 200,00 Yuan liegen
4. OpenID erhalten
Unterstützt derzeit die OpenID des angegebenen WeChat Benutzer verteilen rote Umschläge mit bestimmten Beträgen. (Um die OpenID zu erhalten, lesen Sie bitte den zuvor geschriebenen Artikel: Autorisierung zum Abrufen von Benutzerinformationen durch schnelle Entwicklung öffentlicher WeChat-Konten
5. Verwandte Parametereinstellungen
und Parameter im Zusammenhang mit roten Umschlägen [hauptsächlich Sicherheitsaspekte: IP binden, verhindern, dass Benutzer stehlen], Sie können es unabhängig auf der Seite festlegen und ändern
Der Vorgangspfad lautet wie folgt: [Anmelden bei der Händlerplattform->Produktcenter->Cash Red Packet-> Produkteinstellungen] (Hinweis: Die Bedienschaltfläche „Produkteinstellungen“ erscheint erst, nachdem Sie die Funktion „Bargeld-Rotumschlag“ aktiviert haben) Sie können folgende Parameter einstellen und ändern:
1. Aufrufen der IP-Adresse: Nach dem Einstellen kann nur die eingestellte IP-Adresse angerufen werden, andere IP-Anrufe werden jedoch ausgeführt Fehler melden;
2. Die Obergrenze der Benutzersammlung: Begrenzen Sie die Anzahl der am selben Tag empfangenen OpenIDs
3. Anti-Brushing-Stufe: Anti-Brushing bezieht sich auf das Abfangen von WeChat-Konten. Zombie-Konten, Maschinenkonten usw. Sie können die Anti-Swipe-Stufe ändern. 4. Gleichzeitig können Sie auch den Betrag des roten Umschlags ändern, dies wird jedoch erst wirksam es ist von WeChat Pay genehmigt. >Kategorien für rote Bargeldumschläge
Rote Bargeldumschläge sind in zwei Kategorien unterteilt: 1. Gewöhnlicher roter Umschlag [offizielles Dokument]
1. Schnittstelle zum Versenden gewöhnlicher roter Umschläge
Bargeldrote Umschläge senden
com.javen.weixin.api.RedPackApi.java
private static String sendRedPackUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; /** * 发送红包 * @param params 请求参数 * @param certPath 证书文件目录 * @param partner 证书密码 * @return {String} */ public static String sendRedPack(Map<String, String> params, String certPath, String partner) { return HttpUtils.postSSL(sendRedPackUrl, PaymentKit.toXml(params), certPath, partner); }
1. Gewöhnlicher roter Umschlagcom.javen.weixin.api.RedPackApi.java
private static String sendGroupRedPackUrl = "api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack"; /** * 发送裂变红包 * @param params 请求参数 * @param certPath 证书文件目录 * @param partner 证书密码 * @return {String} */ public static String sendGroupRedPack(Map<String, String> params, String certPath, String partner) { return HttpUtils.postSSL(sendGroupRedPackUrl, PaymentKit.toXml(params), certPath, partner); }
com.javen.utils.ReadPackUtils.java
Demo zum roten Umschlag senden
/** * 发送普通红包 * @param request 获取IP * @param total_amount 付款现金(单位分) * @param total_num 红包发放总人数 * @param wishing 红包祝福语 * @param act_name 活动名称 * @param remark 备注 * @param reOpenid 用户openid * @param partner 商户号 * @param wxappid 公众账号appid * @param sendName 商户名称 * @param paternerKey 商户签名key * @param certPath 证书路径 * @return */ public static boolean sendredpack(HttpServletRequest request,String total_amount,String total_num,String wishing,String act_name,String remark,String reOpenid,String partner,String wxappid,String sendName,String paternerKey,String certPath) { // 商户订单号 String mchBillno = System.currentTimeMillis() + ""; String ip = IpKit.getRealIp(request); Map<String, String> params = new HashMap<String, String>(); // 随机字符串 params.put("nonce_str", System.currentTimeMillis() / 1000 + ""); // 商户订单号 params.put("mch_billno", mchBillno); // 商户号 params.put("mch_id", partner); // 公众账号ID params.put("wxappid", wxappid); // 商户名称 params.put("send_name", sendName); // 用户OPENID params.put("re_openid", reOpenid); // 付款现金(单位分) params.put("total_amount", total_amount); // 红包发放总人数 params.put("total_num", total_num); // 红包祝福语 params.put("wishing", wishing); // 终端IP params.put("client_ip", ip); // 活动名称 params.put("act_name", act_name ); // 备注 params.put("remark", remark); //创建签名 String sign = PaymentKit.createSign(params, paternerKey); params.put("sign", sign); String xmlResult = RedPackApi.sendRedPack(params, certPath, partner); Map<String, String> result = PaymentKit.xmlToMap(xmlResult); log.warn(JsonKit.toJson(result)); //此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 String return_code = result.get("return_code"); //业务结果 String result_code = result.get("result_code"); if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) { return false; } if (StrKit.notBlank(result_code) && "SUCCESS".equals(result_code)) { return true; } return false; }
Datensatz zum roten Umschlag abfragen
/** * 发送裂变红包 * @param partner * @param wxappid * @param sendName * @param reOpenid * @param total_amount * @param total_num * @param wishing * @param act_name * @param remark * @param paternerKey * @param certPath * @return */ public static boolean sendGroupRedPack(String partner, String wxappid, String sendName, String reOpenid, String total_amount, String total_num, String wishing, String act_name, String remark, String paternerKey, String certPath){ // 商户订单号 String mchBillno = System.currentTimeMillis() + ""; Map<String, String> params = new HashMap<String, String>(); // 随机字符串 params.put("nonce_str", System.currentTimeMillis() / 1000 + ""); // 商户订单号 params.put("mch_billno", mchBillno); // 商户号 params.put("mch_id", partner); // 公众账号ID params.put("wxappid", wxappid); // 商户名称 params.put("send_name", sendName); // 用户OPENID params.put("re_openid", reOpenid); // 付款现金(单位分) params.put("total_amount", total_amount); // 红包发放总人数 params.put("total_num", total_num); //红包金额设置方式 params.put("amt_type", "ALL_RAND"); // 红包祝福语 params.put("wishing", wishing); // 活动名称 params.put("act_name", act_name ); // 备注 params.put("remark", remark); //创建签名 String sign = PaymentKit.createSign(params, paternerKey); params.put("sign", sign); String xmlResult = RedPackApi.sendGroupRedPack(params, certPath, partner); Map<String, String> result = PaymentKit.xmlToMap(xmlResult); log.warn(JsonKit.toJson(result)); //此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 String return_code = result.get("return_code"); //业务结果 String result_code = result.get("result_code"); if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) { return false; } if (StrKit.notBlank(result_code) && "SUCCESS".equals(result_code)) { return true; } return false; }
/** * 微信红包demo * @author Javen * 2016年5月28日 */ public class RedPackApiController extends Controller { private static String sendName = "Javen205"; //微信证书路径 private static String certPath = "/Users/Javen/Downloads/cert/apiclient_cert.p12"; //商户相关资料 String wxappid = PropKit.get("appId"); // 微信支付分配的商户号 String partner = PropKit.get("mch_id"); //API密钥 String paternerKey = PropKit.get("paternerKey"); /** * 发送普通红包 */ public void sendredpack() { boolean isSend = ReadPackUtils.sendredpack(getRequest(), "100", "1", "感谢您参加猜灯谜活动,祝您元宵节快乐!", "猜灯谜抢红包活动", "猜越多得越多,快来抢!", "o_pncsidC-pRRfCP4zj98h6slREw", partner, wxappid, sendName, paternerKey, certPath); renderJson(isSend); } /** * 发送裂变红包 */ public void sendGroupRedPack() { boolean isSend = ReadPackUtils.sendGroupRedPack(partner, wxappid, "天虹百货", "o_pncsidC-pRRfCP4zj98h6slREw", "100", "10", "感谢您参加猜灯谜活动,祝您元宵节快乐!", "猜灯谜抢红包活动", "猜越多得越多,快来抢", paternerKey, certPath); renderJson(isSend); } public void query() { String query = ReadPackUtils.query("10000098201411111234567890", partner, wxappid, paternerKey, certPath); renderJson(query); } }
Spezifische Implementierungskapselung
com.javen.weixin.api.RedPackApi.java
private static String getHBInfo = "api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo "; /** * 根据商户订单号查询信息 * @param params 请求参数 * @param certPath 证书文件目录 * @param partner 证书密码 * @return {String} */ public static String getHbInfo(Map<String, String> params, String certPath, String partner) { return HttpUtils.postSSL(getHBInfo, PaymentKit.toXml(params), certPath, partner); }
1. com.javen.utils.ReadPackUtils.java
Download des Quellcodes der WeChat-Plattform für öffentliche Konten
/** * 根据商户订单号查询红包 * @param mch_billno 商户订单号 * @param partner 商户号 * @param wxappid 公众账号ID * @param paternerKey 商户签名Key * @param certPath 证书路径 * @return */ public static String query(String mch_billno,String partner,String wxappid,String paternerKey,String certPath) { Map<String, String> params = new HashMap<String, String>(); // 随机字符串 params.put("nonce_str", System.currentTimeMillis() / 1000 + ""); // 商户订单号 params.put("mch_billno", mch_billno); // 商户号 params.put("mch_id", partner); // 公众账号ID params.put("appid", wxappid); params.put("bill_type", "MCHT"); //创建签名 String sign = PaymentKit.createSign(params, paternerKey); params.put("sign", sign); String xmlResult = RedPackApi.getHbInfo(params, certPath, partner); Map<String, String> result = PaymentKit.xmlToMap(xmlResult); System.out.println(result); return JsonKit.toJson(result); }
2.
WeChat-AbstimmungsquellcodeWeChat People Network v3.4.5 Advanced Business Edition WeChat Rubik's Cube-QuellcodeDas obige ist der detaillierte Inhalt vonTeilen Sie ein Beispiel-Tutorial zum Entwickeln roter Bargeldumschläge auf öffentlichen WeChat-Konten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!