TP8+EasyWeChat6 接入微信v3 Native 扫码支付

TP8官方文档
序言 - ThinkPHP官方手册
EasyWeChat6
EasyWeChat - 一个 PHP 微信开发 SDK | EasyWeChat
官方文档
微信支付开发者文档


安装使用
因为本人用的是 ThinkCMF的框架,来接入微信支付,但是WX官方的文档,本人能力确实有限看的有点😵😵😵。果断选择插件来实现,因为之前接入过 4.x,5.x。   觉得EasyWeChat还是一个很不错的插件。随着WX支付的更新,V2逐渐被淘汰,5.x本身是不支持V2
6. x的变化还是比较大,可以自身参考 上面的链接的文档。。

我本身接入的是native 扫码支付 请看下面的代码

所有的代码可以写在一个类里面

这些配置参考,微信支付的官方文档进行申请以及配置
这个里面 证书 和 私钥 可以写地址
例: 

 'private_key' => CMF_ROOT . 'public\certs\apiclient_key.pem'

也可以直接明文或者写成配置类,但是本人在测试中,发现一个有一个问题,就是写地址的时候本地测试是没问题的,但是部署到服务器上就会提示 ‘证书错误’,在网上查询了很多的资料,其中可能的是证书中存在空格,但是本人在测试中,确实发现证书最后存在一个换行符号,但是删除还是不管用。如果有解决方案,感谢大佬🙇‍🙇‍🙇‍
解决方案:
      我是直接写成配置类或者写成明文这个问题就会消失。(超级🍳)

<?php
use EasyWeChat\Pay\Application;

$config = [
    'mch_id' => 1360649000,

    // 商户证书 和 私钥
    'private_key' => __DIR__ . '/certs/apiclient_key.pem',
    'certificate' => __DIR__ . '/certs/apiclient_cert.pem',

     // v3 API 秘钥
    'secret_key' => '43A03299A3C3FED3D8CE7B820Fxxxxx',

    // v2 API 秘钥
    'v2_secret_key' => '26db3e15cfedb44abfbb5fe94fxxxxx',

    // 平台证书:微信支付 APIv3 平台证书,需要使用工具下载
    // 下载工具:https://github.com/wechatpay-apiv3/CertificateDownloader
    'platform_certs' => [
        // 请使用绝对路径
        // '/path/to/wechatpay/cert.pem',
    ],

    /**
     * 接口请求相关配置,超时时间等,具体可用参数请参考:
     * https://github.com/symfony/symfony/blob/5.3/src/Symfony/Contracts/HttpClient/HttpClientInterface.php
     */
    'http' => [
        'throw'  => true, // 状态码非 200、300 时是否抛出异常,默认为开启
        'timeout' => 5.0,
        // 'base_uri' => 'https://api.mch.weixin.qq.com/', // 如果你在国外想要覆盖默认的 url 的时候才使用,根据不同的模块配置不同的 uri
    ],
];

$app = new Application($config);

下面就是native 支付的连接 ,需要注意的是,在本地的环境地址,回调地址是测不了的,
需要部署到服务上然后进行测试。

$data  是我的配置 ,我没有写成配置类直接存到数据库里,页面可修改

public function pay()
    {
        ///和获配置类
        $app = $this->config();
        $data = WxConfigfModel::find('1');
        //获得订单号
        $orderNo = '202407051532';
        $response = $app->getClient()->postJson('v3/pay/transactions/native', [
            'mchid' => $data['mchid'],
            'out_trade_no' => $orderNo,
            'appid' => $data['appid'],
            'description' => $data['description'],
            'notify_url' => $data['notify_url'], //回调地址
            'amount' => [
                'total' => 2,//费用
                'currency' => 'CNY',
            ]
        ]);

        return json($response->toArray(false));
    }


订单的查询 

  //查询订单
    public function selectOrder($order_no)  //订单号
    {  //获得配置类
        $app = $this->config();
        $data = WxConfigfModel::find('1');
        $outTradeNo = $order_no;
        $response = $app->getClient()->get("v3/pay/transactions/out-trade-no/{$outTradeNo}", [
            'query' => [
                'mchid' => $data['mchid']
            ]
        ]);
        return json($response->toArray());
    }

 订单的退款

//订单退款
    public function refund($order_no,$pay_amount,$start_amount)
    {
        //三个参数 分别是 订单号 退款金额,订单金额
        // 获取配置类
        $app = $this->config();

        // 查询数据库获取配置信息
        $data = WxConfigfModel::find('1');

        // 构建退款请求数据
        // 发起退款请求
        $response = $app->getClient()->postJson('v3/refund/domestic/refunds', [

            "out_trade_no" => $order_no,
            "out_refund_no" => time().rand(10000,99999),
            "reason" => "商品已售完",
            "notify_url"=> data['refund_notify_url'],
            "amount" => [
                "refund" => (int)$pay_amount,
                "total" => (int)$start_amount,
                "currency" => "CNY"
            ]
        ]);
        // 返回退款请求的结果
        // return json($response->toArray());
    }

至此,一套流程就完毕了,支付--查询--退款,希望可以帮助大家👍👍👍

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值