公众号现金红包接口开发

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

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

1.商户号开通现金红包功能
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019021310494221.png
开通现金红包是有条件限制的
在这里插入图片描述
2.下载商户证书
在这里插入图片描述
在这里插入图片描述
3.代码

//红包类
<?php
header("Content-type:text/html;charset=utf-8");

class redPack{//发红包

    public function weixin_red_packet(){

        // 随机字符串
        $data['nonce_str']=$this->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 "<pre>";
//        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="<xml>";
        foreach($arr as $k=>$v){
            $xml.="<".$k.">".$v."</".$k.">";
        }
        $xml.="</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;
    }
}

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java微信公众号现金红包是一种通过在Java代码中调用微信支付接口实现的支付功能,用户可以使用现金红包来给其他用户发送一定金额的红包。以下是具体实现步骤: 首先,我们需要在微信公众平台上注册一个公众号,并进行相关设置和认证。然后,通过微信支付开发文档了解相关的API接口和参数,获取到自己的AppID、商户号和商户密钥等信息。 接下来,在Java项目中引入微信支付的SDK,可以使用第三方开源的SDK如weixin-java-pay等,或者通过HTTP请求自行实现。 然后,编写Java代码调用微信支付接口实现现金红包的功能。首先需要构建请求参数,包括发送红包接口URL、请求方式(一般为POST)、AppID、商户号、商户密钥、随机字符串、签名等信息。可以使用Java中的HttpURLConnection类发送HTTP请求,并添加请求头信息和请求体参数。其中,签名的生成需要根据微信支付的签名规则进行加密计算,确保数据的安全性。 最后,接收到微信支付接口返回的结果后,可以对返回的数据进行解析和处理,判断红包发送状态是否成功。根据业务需求,可以将红包发送结果进行持久化存储,以备后续查询和记录使用。 需要注意的是,微信支付的红包功能需要满足一定的条件和规则,例如红包的最低金额、发送频率等,开发者需要仔细阅读微信支付文档,并根据实际需求进行相应的调整。 总的来说,通过Java编写代码调用微信支付接口实现现金红包功能需要按照微信支付的接口规范进行开发和调试,确保支付接口的安全性和稳定性,同时可以根据具体业务需求进行功能的扩展和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值