php快速接入支付宝即时支付,PC网站支付和手机网站支付,基于thinkPHP框架 WeChatDeveloper支付类包

诸葛立果
2023-12-01

文章介绍

        本文主要介绍通过thinkPHP5和第三方支付类包(WeChatDeveloper)实现快速接入支付宝网站支付和手机网站支付(自动拉起支付宝APP),以及如何进行订单回调、如何判断手机和PC端、如果进行订单退款等,整理了部分在开发中经常遇到的错误和难踩的坑!

WeChatDeveloper介绍

  • WeChatDeveloper 是基于 wechat-php-sdk 重构,优化并完善;
  • 运行最底要求 PHP 版本 5.4 , 建议在 PHP7 上运行以获取最佳性能;
  • WeChatDeveloper 针对 access_token 失效增加了自动刷新机制;
  • 微信的部分接口需要缓存数据在本地,因此对目录需要有写权限;
  • 我们鼓励大家使用 composer 来管理您的第三方库,方便后期更新操作;
  • WeChatDeveloper 已历经数个线上项目考验,欢迎 fork 或 star 此项目。
  • 微信商户支持已经支持 v2 接口,组件开发版支持 v3 接口。

WeChatDeveloper功能描述

  • 微信小程序,服务端接口支持
  • 微信认证服务号,服务端接口支持
  • 微信支付(账单、卡券、红包、退款、转账、App支付、JSAPI支付、Web支付、扫码支付等)
  • 支付宝支付(账单、转账、App支付、刷卡支付、扫码支付、Web支付、Wap支付等)

GIT库地址:https://gitee.com/zoujingli/WeChatDeveloper

官方文档地址:https://www.kancloud.cn/zoujingli/wechat-developer

# 首次安装 线上版本(稳定)
composer require zoujingli/wechat-developer

# 首次安装 开发版本 
composer require zoujingli/wechat-developer dev-master

# 更新 WeChatDeveloper
composer update zoujingli/wechat-developer

开发注意事项:

1、支付宝配置参数如何获取请移步文章 “PHP接入支付宝支付接口,支付宝公钥、应用私钥、APPID和产品申请指南” 有详细的获取教程,记得开通对应产品;

2、复制以下代码前必须安装WeChatDeveloper类,下面都是基于这个类写的,如果不安装不用在往下看了;

3、支付宝支持沙箱模式,可以先使用沙箱进行测试开发,非常好用;

4、下面代码部分已经用xxx代码,需要替换成自己业务对应的才可以,验证是否手机端的方法已经在 “php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南” 文章中写了,需要的可以去拿;

5、在支付成功回调的过程中,支付宝回进行多次回调,记得加验证!!


项目示例:

    /**
     * 支付宝支付
     */
    public function aliPay(){
        // 准备配置参数
        $config = [
            // 沙箱模式
            'debug'       => false,
            // 签名类型(RSA|RSA2)
            'sign_type'   => "RSA2",
            // 应用ID
            'appid'       => '20161xxxxxxxx088',
            // 支付宝公钥 (1行填写,特别注意:这里是支付宝公钥,不是应用公钥,最好从开发者中心的网页上去复制)
            'public_key'  => '公钥',
            // 支付宝私钥 (1行填写)
            'private_key' => '私钥'
        ];
        // 异步通知地址和支付成功后的同步跳转
        $config['notify_url'] = 'http://www.baidu.com/aliCallback';
        $config['return_url'] = 'http://www.baidu.com/complete';

        try {
            // 实例支付对象,判断是手机端还是PC端
            if(is_wap()){
                $pay = \AliPay\Wap::instance($config);
            }else{
                $pay = \AliPay\Web::instance($config);
            }
            // 传入参数
            $result = $pay->apply([
                'out_trade_no' => time(), // 商户订单号
                'total_amount' => 1, // 支付金额,单位是元
                'subject'      => '商品购买', // 支付订单描述
            ]);
            echo $result;
        } catch (\WeChat\Exceptions\InvalidResponseException $e) {
            echo $e->getMessage();
        }
    }
    /**
     * 支付宝订单回调
     */
    public function aliCallback(){
        // 准备配置参数
        $config = [
            // 沙箱模式
            'debug'       => false,
            // 签名类型(RSA|RSA2)
            'sign_type'   => "RSA2",
            // 应用ID
            'appid'       => '20161xxxxxxxx088',
            // 支付宝公钥 (1行填写,特别注意:这里是支付宝公钥,不是应用公钥,最好从开发者中心的网页上去复制)
            'public_key'  => '公钥',
            // 支付宝私钥 (1行填写)
            'private_key' => '私钥'
        ];
        // 实例化类
        $alipay = new \AliPay\Web($config);
        // 获取通知数据,括号里不能加true
        $data = $alipay->notify();
        if($data['trade_status']!='TRADE_SUCCESS'){
            Log::record("订单发生了错误","订单错误");
            exit;
        }
        // 根据订单号修改订单状态
        // 注意这里要对订单状态作为条件,支付宝会进行多次回调
        Order::update(['status'=>"2"],['ticket_id'=>$data['out_trade_no'],'status'=>1]);
    }
    /**
     * 支付宝退款
     */
    public function aliRefund(){
        // 准备配置参数
        $config = [
            // 沙箱模式
            'debug'       => false,
            // 签名类型(RSA|RSA2)
            'sign_type'   => "RSA2",
            // 应用ID
            'appid'       => '20161xxxxxxxx088',
            // 支付宝公钥 (1行填写,特别注意:这里是支付宝公钥,不是应用公钥,最好从开发者中心的网页上去复制)
            'public_key'  => '公钥',
            // 支付宝私钥 (1行填写)
            'private_key' => '私钥'
        ];
        try {
            $pay = \AliPay\App::instance($config);
            $result = $pay->refund('订单号', '退款金额');
            // 更改数据库状态
            Order::update(['status'=>"-2"],['order_sn'=>'订单号']);
            return success_json('','退款成功');
        } catch (\WeChat\Exceptions\InvalidResponseException $e) {
            return error_json('退款失败:'.$e->getMessage());
        }
    }

文章:php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南

 类似资料: