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

简介: 这里最主要的就是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

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

目录
相关文章
|
5月前
|
小程序 开发者
微信小程序之网络数据请求 wx:request的简单使用
这篇文章介绍了微信小程序中如何使用wx.request进行网络数据请求,包括请求的配置、请求的格式以及如何在开发阶段关闭请求的合法检验。
微信小程序之网络数据请求 wx:request的简单使用
|
5月前
|
小程序 PHP
微信小程序给 thinkphp后端发送请求出现错误 Wrong number of segments 问题的解决 【踩坑记录】
本文记录了微信小程序向ThinkPHP后端发送请求时出现"Wrong number of segments"错误的解决方法。问题原因是小程序请求header中的token变量名写错,导致token未正确传递至后端。作者提供了详细的检查步骤和建议,包括验证URL路径、参数规范和路由配置的匹配,以确保请求能正确发送和处理。
|
6月前
|
小程序 前端开发 JavaScript
微信小程序实现微信支付(代码和注释很详细)
微信小程序实现微信支付(代码和注释很详细)
|
7月前
|
开发框架 移动开发 JSON
利用微信公众号实现商品的展示和支付(1)
利用微信公众号实现商品的展示和支付(1)
|
6月前
|
前端开发 JavaScript API
微信公众号项目,实现微信支付(具体流程和参数)
微信公众号项目,实现微信支付(具体流程和参数)
|
7月前
|
安全 API Windows
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
|
7月前
|
存储
支付系统36-------订单表优化,添加payment_type字段,无论是微信支付还是支付宝支付都放到 t_order_info表中了,payment_type用来判断支付宝还是微信支付的
支付系统36-------订单表优化,添加payment_type字段,无论是微信支付还是支付宝支付都放到 t_order_info表中了,payment_type用来判断支付宝还是微信支付的
|
7月前
|
存储 开发框架 JavaScript
利用微信公众号实现商品的展示和支付(2)
利用微信公众号实现商品的展示和支付(2)
|
8月前
|
开发工具
微信客服系统开发SDK使用教程- 拉取当前微信个人号列表请求(立即)
微信客服系统开发SDK使用教程- 拉取当前微信个人号列表请求(立即)
|
8月前
|
PHP 移动开发 安全
PHP应用如何对接微信公众号JSAPI支付
本文介绍了微信支付的多种方式,包括JSAPI支付、APP支付、Native支付、付款码支付和H5支付。
102 8

热门文章

最新文章