Thinkphp6 实现微信支付退款

为了减少微信退款用到的配置,这里使用插件yansongda/pay来实现微信退款。

一、利用composer安装yansongda/pay。详细安装点这里

composer require yansongda/pay:~3.2.0 -vvv
composer require guzzlehttp/guzzle:^7.0
composer require php-di/php-di -W

二、在config目录增加配置文件pay.php,并配置相关信息

<?php
use Yansongda\Pay\Pay;
return [
    'alipay' => [
        'default' => [
            // 必填-支付宝分配的 app_id
            'app_id' => '2016082000295641',
            // 必填-应用私钥 字符串或路径
            // 在 https://open.alipay.com/develop/manage 《应用详情->开发设置->接口加签方式》中设置
            'app_secret_cert' => 'MIIEvAIBADANBgkqhkiG.........TTg==',
            // 必填-应用公钥证书 路径
            // 设置应用私钥后,即可下载得到以下3个证书
            'app_public_cert_path' => '*/appCertPublicKey_2016082000295641.crt',
            // 必填-支付宝公钥证书 路径
            'alipay_public_cert_path' => '*/alipayCertPublicKey_RSA2.crt',
            // 必填-支付宝根证书 路径
            'alipay_root_cert_path' => '*/alipayRootCert.crt',
            'return_url' => 'https://yansongda.cn/alipay/return',
            'notify_url' => 'https://yansongda.cn/alipay/notify',
            // 选填-第三方应用授权token
            'app_auth_token' => '',
            // 选填-服务商模式下的服务商 id,当 mode 为 Pay::MODE_SERVICE 时使用该参数
            'service_provider_id' => '',
            // 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
            'mode' => Pay::MODE_NORMAL,
        ]
    ],
    'wechat' => [
        'default' => [
            // 必填-商户号,服务商模式下为服务商商户号
            // 可在 https://pay.weixin.qq.com/ 账户中心->商户信息 查看
            'mch_id' => '',
            // 必填-商户秘钥
            // 即 API v3 密钥(32字节,形如md5值),可在 账户中心->API安全 中设置
            'mch_secret_key' =>'',
            // 必填-商户私钥 字符串或路径
            // 即 API证书 PRIVATE KEY,可在 账户中心->API安全->申请API证书 里获得
            // 文件名形如:apiclient_key.pem
            'mch_secret_cert' => "/cert/apiclient_key.pem",
            // 必填-商户公钥证书路径
            // 即 API证书 CERTIFICATE,可在 账户中心->API安全->申请API证书 里获得
            // 文件名形如:apiclient_cert.pem
            'mch_public_cert_path' => "/cert/apiclient_cert.pem",
            // 必填-微信回调url
            // 不能有参数,如?号,空格等,否则会无法正确回调
            'notify_url' => "https://*/notify_refund",
            // 选填-公众号 的 app_id
            // 可在 mp.weixin.qq.com 设置与开发->基本配置->开发者ID(AppID) 查看
            'mp_app_id' => '',
            // 选填-小程序 的 app_id
            'mini_app_id' => '',
            // 选填-app 的 app_id
            'app_id' => '',
            // 选填-合单 app_id
            'combine_app_id' => '',
            // 选填-合单商户号 
            'combine_mch_id' => '',
            // 选填-服务商模式下,子公众号 的 app_id
            'sub_mp_app_id' => '',
            // 选填-服务商模式下,子 app 的 app_id
            'sub_app_id' => '',
            // 选填-服务商模式下,子小程序 的 app_id
            'sub_mini_app_id' => '',
            // 选填-服务商模式下,子商户id
            'sub_mch_id' => '',
            // 选填-微信平台公钥证书路径, optional,强烈建议 php-fpm 模式下配置此参数
            'wechat_public_cert_path' => [
                '45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatPublicKey.crt',
            ],
            // 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SERVICE
            'mode' => Pay::MODE_NORMAL,
        ]
    ],
    'unipay' => [
        'default' => [
            // 必填-商户号
            'mch_id' => '777290058167151',
            // 必填-商户公私钥
            'mch_cert_path' => __DIR__.'/Cert/unipayAppCert.pfx',
            // 必填-商户公私钥密码
            'mch_cert_password' => '000000',
            // 必填-银联公钥证书路径
            'unipay_public_cert_path' => __DIR__.'/Cert/unipayCertPublicKey.cer',
            // 必填
            'return_url' => 'https://yansongda.cn/unipay/return',
            // 必填
            'notify_url' => 'https://yansongda.cn/unipay/notify',
        ],
    ],
    'logger' => [
        'enable' => false,
        'file' => './logs/pay.log',
        'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
        'type' => 'single', // optional, 可选 daily.
        'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
    ],
    'http' => [ // optional
        'timeout' => 5.0,
        'connect_timeout' => 5.0,
        // 更多配置(https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
    ],
];

三、在控制器中引入类库

use Yansongda\Pay\Pay;

四、初始化并执行退款操作

$config = config("pay");
//配置退款回调地址
$config['wechat']['default']['notify_url']="https://***/notify_refund";
//初始化
Pay::config($config);
//退款参数
$refund_params = [
    'out_trade_no' => '自己平台的订单号',
    'out_refund_no' => '自己平台的退款单号',
    'amount' => [
        'refund' => 退款金额分,
        'total' => 原订单金额分,
        'currency' => 'CNY',
    ],
];
$payResult = Pay::wechat()->refund($refund_params );
$result = json_decode(json_encode($payResult ),true);

五、通过判断$result的返回数据,来验证是否发起退款请求成功。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花生²

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值