如何发企业现金红包?

等了好久,微信支付的企业红包还是没有开放春节期间的裂变红包。

 

什么是裂变红包?春节抢红包我们会收到“海尔”等企业发送的红包,然后领取完了之后还能转发给好友或者微信群,让朋友一起领取。

 

有一些第三方开发者试图用H5页面构建裂变红包,集满分享数再调用普通红包发放,很快又被微信严厉禁止。

 

但是现在企业红包可以有2种发放方式。

1、登陆微信商户平台。https://pay.weixin.qq.com/

    充值,创建现金红包,提交openid列表发放。

    优点:可以批量发送固定额度,或者随机额度。

    缺点:不能程序处理,不够灵活。而且要手动填写openid列表上传。

    blob.png

 

2、调用红包API发放。

     优点:可以程序灵活处理,创建特定场景使用。比如摇周边+抢红包

     缺点:只能单个用户发放,接口调用受限制,集中发送接口不稳定。

 

    /**

     *  微信企业红包

     * @param type $openid 用户openid

     * @param type $mch_billno 订单号 $mch_id + 随机数

     * @param type $send_name 发送账号昵称

     * @param type $total_amount 发送金额

     * @param type $wishing 祝福语

     * @param type $act_name 活动名称

     * @param type $remark 备注

     * @return boolean

     */

    public function sendredpack($openid, $mch_billno, $send_name, $total_amount, $wishing, $act_name, $remark) {

        $postdata         = array(

            "nonce_str"    => $this->generateNonceStr(),

            "mch_billno"   => $mch_billno,

            "mch_id"       => $this->partnerid,

            "wxappid"      => $this->appid,

            "nick_name"    => $send_name,

            "send_name"    => $send_name,

            "re_openid"    => $openid,

            "total_amount" => $total_amount,

            "min_value"    => $total_amount,

            "max_value"    => $total_amount,

            "total_num"    => 1,

            "wishing"      => $wishing,

            "client_ip"    => get_client_ip(),

            "act_name"     => $act_name,

            "remark"       => $remark,

        );

        $postdata["sign"] = $this->getPaySign($postdata);

        $result           = $this->curl_post_ssl(self::MCH_REDPACK, self::xml_encode($postdata));        

        if ($result) {

            //$json = json_decode($result, true);

            $json = (array) simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);

            if (!$json || !empty($json['errcode'])) {

                $this->errCode = $json['errcode'];

                $this->errMsg  = $json['errmsg'] . json_encode($postdata);

                return false;

            }

            return $json;

        }

        return false;

    }

 

/**

    注意:提交的证书地址必须是本地全路径

    APP_ROOT . 'Static/Resource/CA/apiclient_key.pem')

 

**/

    function curl_post_ssl($url, $vars, $second = 30, $aHeader = array()) {

        $ch = curl_init();

        //超时时间

        curl_setopt($ch, CURLOPT_TIMEOUT, $second);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        //这里设置代理,如果有的话

        //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');

        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

 

        //以下两种方式需选择一种

        //第一种方法,cert 与 key 分别属于两个.pem文件

        curl_setopt($ch, CURLOPT_SSLCERT, APP_ROOT . 'Static/Resource/CA/apiclient_cert.pem');

        curl_setopt($ch, CURLOPT_SSLKEY, APP_ROOT . 'Static/Resource/CA/apiclient_key.pem');

        curl_setopt($ch, CURLOPT_CAINFO, APP_ROOT . 'Static/Resource/CA/rootca.pem');

 

        //第二种方式,两个文件合成一个.pem文件

        //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');

 

        if (count($aHeader) >= 1) {

            curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);

        }

 

        curl_setopt($ch, CURLOPT_POST, 1);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);

        $data = curl_exec($ch);

        if ($data) {

            curl_close($ch);

            return $data;

        } else {

            $error = curl_errno($ch);

            //echo "call faild, errorCode:$error\n"; 

            curl_close($ch);

            return false;

        }

    }

推荐文章

企业号的无限价值

微信公众号运营的七大问题

微信开发有哪些常见的功能?

模板和定制有什么区别?