Maison  >  Article  >  Applet WeChat  >  Partagez un exemple de tutoriel sur la façon de développer des enveloppes rouges en espèces sur les comptes publics WeChat

Partagez un exemple de tutoriel sur la façon de développer des enveloppes rouges en espèces sur les comptes publics WeChat

零下一度
零下一度original
2017-05-19 16:18:034642parcourir

Bienvenue pour laisser des messages et transférer

Série d'articles sur le développement rapide de WeChat : cliquez ici

Les articles précédents ont présenté le paiement WeChat. Paiement par compte officiel, paiement par scan code WeChat, paiement par carte, paiement WeChat

Cet article parlera des outils de paiement dans les marchands WeChat - enveloppes rouges en espèces

Partagez un exemple de tutoriel sur la façon de développer des enveloppes rouges en espèces sur les comptes publics WeChat

Cash red enveloppe.png

Travaux de préparation

[Document officiel]

1 Activer les autorisations d'enveloppe rouge cash

En cours d'utilisation. Avant de recevoir des enveloppes rouges cash, veuillez vous rendre sur l'activation de la fonction enveloppe rouge cash. Chemin d'opération : [Connectez-vous à la plateforme marchande de paiement WeChat——>Centre de produits——>Cash Red Envelope——>Activer].

2. Téléchargez le APIcertificat

Lorsqu'un commerçant appelle l'interface de WeChat Red Packet, le serveur effectuera une vérification du certificat. certificat sur la plateforme marchand

Partagez un exemple de tutoriel sur la façon de développer des enveloppes rouges en espèces sur les comptes publics WeChat

Cash Red Packet-Download Certificate.png

Partagez un exemple de tutoriel sur la façon de développer des enveloppes rouges en espèces sur les comptes publics WeChat

Cash Red Packet-Downloaded File.png

Quelqu'un veut demander lequel doit être utilisé pour autant de certificats ? Est-ce que cela a quelque chose à voir avec le langage de développement ?

Quelle langue utilise quel certificat, et comment l'utiliser ? Veuillez vous référer à 证书说明.txt

dans la capture d'écran. Le contenu est le suivant :

欢迎使用微信支付!
微信支付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. Recharge

Avant d'émettre des enveloppes rouges en espèces, veuillez vous assurer que vous disposez de fonds suffisants. S'il est insuffisant, veuillez recharger. Chemin d'opération : [Connexion à la plateforme marchande—>Centre de comptes—>Gestion des fonds—>Recharge]

Le montant moyen de chaque enveloppe rouge doit être compris entre 1,00 yuans et 200,00 yuans

Partagez un exemple de tutoriel sur la façon de développer des enveloppes rouges en espèces sur les comptes publics WeChat

Cash red enveloppe-recharge.png

4. Obtenir l'openid

Prend actuellement en charge l'openid du WeChat désigné. les utilisateurs distribuent des enveloppes rouges de montants spécifiés. (Pour obtenir openid, veuillez vous référer à l'article écrit précédemment : Autorisation d'obtenir des informations utilisateur grâce au développement rapide des comptes publics WeChat

5. Paramètres associés

et paramètres liés aux enveloppes rouges [principalement aspects de sécurité : liaison IP, empêcher les utilisateurs de voler], vous pouvez la définir et la modifier indépendamment sur la page
Le chemin d'opération est le suivant : [Connectez-vous à la plateforme marchande——>Centre de produits——>Cash Paquet rouge——>Paramètres du produit] (Remarque : le bouton de commande « Paramètres du produit » n'apparaîtra qu'après avoir activé la fonction d'enveloppe rouge en espèces) Vous pouvez définir et modifier les paramètres suivants :

Partagez un exemple de tutoriel sur la façon de développer des enveloppes rouges en espèces sur les comptes publics WeChat

Paramètres de réglage de l'enveloppe rouge Cash.png

Instructions :

1. Adresse IP d'appel : après le réglage, seule l'adresse IP définie peut être appelée, et d'autres appels IP signaleront des erreurs ;
2. La limite supérieure de la collecte des utilisateurs : limiter le nombre du même openid reçu le même jour
3. Niveau anti-brushing : l'anti-brushing fait référence au contrôle des risques de WeChat. interception des comptes WeChat, des comptes zombies, des comptes machines, etc. Vous pouvez modifier le niveau anti-swipe contrôle l'intensité de l'anti-swipe 4. En même temps, vous pouvez également demander de modifier le montant de l'enveloppe rouge, mais cela. ne prendra effet qu'après approbation par WeChat Pay. >Catégories d'enveloppes rouges en espèces

Les enveloppes rouges en espèces sont divisées en deux catégories : Enveloppe rouge ordinaire [document officiel]

. 2. Enveloppe rouge de fission [document officiel]

Les deux Certains paramètres sont différents


Envoyer des enveloppes rouges en espèces

Interface pour l'envoi d'enveloppes rouges ordinaires

2. Interface d'envoi d'enveloppes rouges à fission

com.javen.weixin.api.RedPackApi.java

Mise en place spécifique du packaging
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. com.javen.weixin.api.RedPackApi.java2. Enveloppe rouge Fission

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);
    }

Envoyer une démo d'enveloppe rougecom.javen.utils.ReadPackUtils.java

Requête de l'enregistrement de l'enveloppe rouge
/**
     * 发送普通红包
     * @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;
    }

[Requête du document officiel de l'enregistrement de l'enveloppe rouge]

/**
     * 发送裂变红包
     * @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;

    }
Encapsulation d'interface

/**
 * 微信红包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);
    }

}

Encapsulation d'implémentation spécifique

[Recommandations associées]com.javen.weixin.api.RedPackApi.java

1
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);
    }
WeChat public. Téléchargement du code source de la plateforme de compte

com.javen.utils.ReadPackUtils.java

2.
/**
     * 根据商户订单号查询红包
     * @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) {
        Map18fed3eaa375b9cabd6da695ec776cac params = new HashMap18fed3eaa375b9cabd6da695ec776cac();
        // 随机字符串
        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);
        Map18fed3eaa375b9cabd6da695ec776cac result = PaymentKit.xmlToMap(xmlResult);
        System.out.println(result);
        return JsonKit.toJson(result);
    }
Code source de vote WeChat

3 WeChat People Network v3.4.5 Advanced Business Edition WeChat Rubik's Cube Source. Code

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn