公众号现金红包接口开发

之前要做一个公众号发红包的活动现在记录一下

详细参考接口文档:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1

1.商户号开通现金红包功能
公众号现金红包接口开发_第1张图片
开通现金红包是有条件限制的
公众号现金红包接口开发_第2张图片
2.下载商户证书
公众号现金红包接口开发_第3张图片
公众号现金红包接口开发_第4张图片
3.代码

//红包类
get_unique_value();
        //签名
        $data['sign']="";
        $data['re_openid']=$openid;
//        //商户号,输入你的商户号
        $data['mch_id']="******";
        //商户订单号,可以按要求自己组合28位的商户订单号
        $data['mch_billno']=$data['mch_id'].date("ymd")."888888".rand(1000,9999);
        //公众帐号appid,输入自己的公众号appid
       $data['wxappid']="*****";
//        //商户名称
        $data['send_name']="米萌";
//        //用户openid,输入待发红包的用户openid
        $data['re_openid']="*****";
        //付款金额单位是分
        $data['total_amount']="100";
//        //红包发放总人数
       $data['total_num']="1";
//        //红包祝福语
        $data['wishing']="祝你发财";
//        //IP地址
        $data['client_ip']='*****';
//        //活动名称
        $data['act_name']="发红包啦";
//        //备注
/       $data['remark']="没有备注";
        //场景ID
        // $data['send_id']="PRODUCT_5";
        //活动信息
        // $data['risk_info']="";

        // 生成签名
        //对数据数组进行处理
        //API密钥,输入自己的appsecret
        $appsecret="****";
        $data=array_filter($data);
        ksort($data);

        $str="";
        foreach($data as $k=>$v){
            $str.=$k."=".$v."&";
        }
        $str.="key=".$appsecret;

        $data['sign']=strtoupper(MD5($str));

        /*
          发红包操作:
            1.将请求数据转换成xml
            2.发送请求
            3.将请求结果转换为数组
            4.将请求信息和请求结果录入到数据库中
            4.判断是否通信成功
            5.判断是否转账成功
         */


        //发红包接口地址
        $url="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";

        //将请求数据由数组转换成xml
        $xml=$this->arraytoxml($data);
        //进行请求操作

        $res=$this->mycurl($xml,$url);
        //将请求结果由xml转换成数组
        $arr=$this->xmltoarray($res);

        //请请求信息和请求结果录入到数据库中
        // $transfer['partner_trade_no']=$data['partner_trade_no'];
        // $transfer['request_data']=serialize($data);
        // $transfer['response_data']=serialize($arr);
        // if($arr['return_code']=="SUCCESS" && $arr['result_code']=="SUCCESS"){
        // $transfer['success']=1;
        // $transfer_res['success']=1;
        // }else{
        // $transfer['success']=0;
        // $transfer_res['success']=0;
        // $transfer_res['desc']=$arr['return_msg'];
        // }
        // $transfer['add_time']=time();

        // D("weixin_transfer")->add($transfer);
        // 输出请求结果数组

//        echo "
";
//        print_r($arr);
//        exit("weixin_red_packet");

        return $arr;
    }



// 生成32位唯一随机字符串
    private function get_unique_value(){
        $str=uniqid(mt_rand(),1);
        $str=sha1($str);
        return md5($str);
    }
// 将数组转换成xml
    private function arraytoxml($arr=array()){

        $xml="";
        foreach($arr as $k=>$v){
            $xml.="<".$k.">".$v."";
        }
        $xml.="";

        return $xml;
    }
// 将xml转换成数组
    private function xmltoarray($xml){
        //禁止引用外部xml实体
        libxml_disable_entity_loader(true);
        $xmlstring=simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA);
        $arr=json_decode(json_encode($xmlstring),true);
        return $arr;
    }

//进行curl操作
    private function mycurl($param="",$url) {
        $postUrl = $url;
        $curlPost = $param;
        //初始化curl
        $ch = curl_init();
        //抓取指定网页
        curl_setopt($ch, CURLOPT_URL,$postUrl);
        //设置header
        curl_setopt($ch, CURLOPT_HEADER, 0);
        //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, 1);
        // 增加 HTTP Header(头)里的字段
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
        // 终止从服务端进行验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        //这个是证书的位置
        curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/cert/apiclient_cert.pem');
        //这个也是证书的位置
        curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/cert/apiclient_key.pem');
        //运行curl
        $data = curl_exec($ch);
        //关闭curl
        curl_close($ch);

        return $data;
    }
}

当时做的时候代码有作参考我忘记原文链接了 联系我删除

你可能感兴趣的:(公众号现金红包接口开发)