微信公众号开发(六)微信支付(发红包、企业支付到零钱)需要证书请求示例

简介: 这里最主要的就是curlpost请求的时候需要带上证书。否则请求会失败。

微信支付,发现金红包及企业支付到零钱这两个操作请求是需要携带证书的。

image.png

证书如何下载,如何配置,我这里就不赘述了。官方文档给的说明还算是清楚。

我这里直接给出我现在正在使用的微信生成支付签名的代码:

php

复制代码

class WxPayController extends CommonController
{
    /**
     * @name: 公众号appid
     * @author: camellia
     * @date: 2021-02-19 
     */
    private $appid = 'xxx';
    /**
     * @name: 微信支付商户秘钥
     * @author: camellia
     * @date: 2021-02-19 
     */
    private $mch_id = 'xxx';
    /**
     * @name: 自定义秘钥key
     * @author: camellia
     * @date: 2021-02-19 
     */
    private $wxpay_key = 'xxx';
    /**
     * @name curl_post公共请求方法
     * @author camellia
     * @date 20200630
     * @param $url 请求连接
     * @param $data 请求参数
     */
    public function curlPost($url, $data)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        // 请求的时候需要带上证书信息(证书路径需要是绝对路径)
        curl_setopt($ch, CURLOPT_SSLCERT, '/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxxx/xxx/xxx/xxx/apiclient_cert.pem');
        curl_setopt($ch, CURLOPT_SSLKEY, '/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/xxx/apiclient_key.pem');
        // curl_setopt($ch, CURLOPT_CAINFO, '/xxx/xxx/xxx/xxx/rootca.pem'); // CA根证书(用来验证的网站证书是否是CA颁布)
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        // POST数据
        curl_setopt($ch, CURLOPT_POST, 1);
        // 把post的变量加上
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }
    /**
     * @name: 微信签名加密算法
     * @author: camellia
     * @date: 2021-02-19 
     * @param:  $data   array   微信支付请求数据数组
     * @return: $sign   string  微信支付签名字符串
     */
    public function Cryptage($data)
    {
        ksort($data);
        $stringA = '';
        foreach ($data as $k => $v) 
        {
            $stringA .= $k . '=' . $v . '&';
        }
        $stringA .= 'key=' . $this->wxpay_key;
        $sign = strtoupper(md5($stringA));
        return $sign;
    }
    /**
     * @name: 给用户发钱(红包)
     * @author: camellia
     * @date: 2021-02-19 
     * @param:  wx_exchange  微信支付订单表
     * @return: data    type    description
     * 官方文档:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3
     */
    public function sendMoneyToUser()
    {
        // 用户openid
        $openid = 'xxxx';
        // 发放现金额度
        $total_amount = 101;
        $mch_billno = 'hb'.time(). rand(10000, 99999);
        // 商户订单号
        $data['mch_billno'] = $mch_billno;
        // 微信商户号
        $data['mch_id'] = $this->mch_id;
        // 公众号appid
        $data['wxappid'] = $this->appid;
        // 商户名称
        $data['send_name'] = 'xxx';
        // 用户openid
        $data['re_openid'] = $openid;
        // 付款金额
        $data['total_amount'] = $total_amount;
        // 红包总数
        $data['total_num'] = 1;
        // 红包祝福语
        $data['wishing'] = 'xxx';
        // client_ip
        $data['client_ip'] = 'xxx';
        // 活动名称
        $data['act_name'] = 'xxx';
        // 备注
        $data['remark'] = 'xxx';
        // 场景id
        // $data['scene_id'] = 'PRODUCT_2';
        // 随机字符串
        $data['nonce_str'] = 'xxxxx';
        $sign = $this->Cryptage($data);
        $str = "<xml> 
                <sign>$sign</sign> 
                <mch_billno>".$data['mch_billno']."</mch_billno> 
                <mch_id>".$data['mch_id']."</mch_id> 
                <wxappid>".$data['wxappid']."</wxappid> 
                <send_name>".$data['send_name']."</send_name> 
                <re_openid>".$data['re_openid']."</re_openid> 
                <total_amount>".$data['total_amount']."</total_amount> 
                <total_num>".$data['total_num']."</total_num> 
                <wishing>".$data['wishing']."</wishing> 
                <client_ip>".$data['client_ip']."</client_ip> 
                <act_name>".$data['act_name']."</act_name> 
                <remark>".$data['remark']."</remark> 
                <nonce_str>".$data['nonce_str']."</nonce_str>  
                </xml>";
        $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
        $result = $this->curlPost($url, $str);
        var_dump($result);die;
    }
}

这里最主要的就是curlpost请求的时候需要带上证书。否则请求会失败。

我这里指的是需要证书的微信支付的功能,正常用户扫码支付功能,则不需要携带这些证书等。

有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”

目录
相关文章
|
1月前
【微信公众平台对接】有关【创建发票卡券模板】调用示例
【微信公众平台对接】有关【创建发票卡券模板】调用示例
15 0
|
1月前
【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例
【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例
48 0
|
2月前
|
Web App开发 监控 JavaScript
1号防红网:什么是微信防红不死短链接?微信防红不死短链接代码示例
1号防红网:什么是微信防红不死短链接?微信防红不死短链接代码示例
51 0
|
4月前
【微信公众平台对接】有关【创建发票卡券模板】调用示例
【微信公众平台对接】有关【创建发票卡券模板】调用示例
37 0
|
1月前
|
开发者
微信公众平台开发基本配置
微信公众平台开发基本配置
88 0
|
4月前
【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例
【微信公众平台对接】有关【上传图文消息内的图片获取URL】调用示例
63 0
|
1月前
|
小程序 前端开发 程序员
【微信小程序】-- 网络数据请求(十九)
【微信小程序】-- 网络数据请求(十九)
|
1月前
|
移动开发 JavaScript
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
39 0
|
3月前
|
XML Go 数据格式
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
135 0
|
4月前
|
前端开发 开发者
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
51 0

热门文章

最新文章