Thinkphp6支付宝App支付

  1. 下载支付宝支付SDK放入extend文件下。
    在这里插入图片描述
  2. 将需要用到的文件加入命名空间方便后续使用,如订单验签等…。
    在这里插入图片描述在这里插入图片描述 3. 将alipay下所有文件中带有Exception的地方前面加斜杠(\)不然无法捕获到错误。
    在这里插入图片描述
  3. 添加测试数据返回唤起支付宝支付数据。
    public function aliArousePay()
    {
        $order_id     = $this->request->post('order_id/d', null);
        $order_number = $this->request->post('order_number/s', null);
        if (!$order_id and !$order_number) {
            return self::fail('订单ID或订单号必须存在其中一个');
        }
        $order_map = array(
            ['uid', '=', $this->userinfo['account']],
            ['pay_state', '<>', 20]
        );
        if ($order_id) {//订单ID
            $order_map[] = ['order_id', '=', $order_id];
        }
        if ($order_number) {//订单号
            $order_map[] = ['order_number', '=', $order_number];
        }
        $order_info = Order::where($order_map)->find();
        if (!$order_info) {
            return self::fail('该订单不存在或已支付');
        }
        if ($order_info['total_price'] <= 0) {
            return self::fail('订单支付金额不合法!');
        }
        //实例化阿里支付类
        $AliPayModel = new AopClient();
        //订单参数
        $unifiedOrderBody = array_filter([
            'total_amount'      => $order_info['total_price'],//订单总金额单位为元,[必填]
            'body'              => 'xxxxx',//订单描述
            'subject'           => $order_info['remark'] ?? '订单',//订单标题。注意:不可使用特殊字符,如 /,=,& 等。[必填]
            'out_trade_no'      => $order_info['order_number'],//商户订单号。由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。[必填]
            'goods_type'        => 0,//商品主类型,取值如下:0:虚拟类商品;1:实物类商品。
            'merchant_order_no' => $order_info['order_number'],//商户的原始订单号
        ]);
        //支付宝设置参数
        $param_data = array_filter([
            'app_id'      => config('alipay.app_id'),//支付宝分配给开发者的应用ID
            'method'      => 'alipay.trade.app.pay',//接口名称
            'charset'     => 'utf-8',//请求使用的编码格式
            'sign_type'   => 'RSA2',//商户生成签名字符串所使用的签名算法类型
            'timestamp'   => date("Y-m-d H:i:s"),  //发送请求的时间
            'version'     => 1.0,//调用的接口版本,固定为:1.0
            'notify_url'  => config('alipay.notify_url') . 'client/payment.xxxx/aliNotify',//支付宝服务器主动通知地址
            'biz_content' => json_encode($unifiedOrderBody),//业务请求参数的集合,长度不限,json格式
        ]);
        //组装请求签名参数
        $paramStr = $AliPayModel->getSignContent($param_data);
        //生成签名
        $sign = $AliPayModel->alonersaSign($paramStr, config('alipay.private_key'), 'RSA2');
        //赋值sign给支付宝设置参数
        $param_data['sign'] = $sign;
        //最终请求参数
        $result = $AliPayModel->getSignContentUrlencode($param_data);
        //返回唤起支付数据
        return self::successful('success', $result);
    }
  1. 测试可用
    在这里插入图片描述
  2. 支付宝订单验签
   public function aliNotify()
    {
        $data         = $_POST;
        $order_number = $data['out_trade_no'];//商户订单号
        $trade_no     = $data['trade_no'];//支付宝交易号
        $result_data  = $this->authAliOrder($order_number, $trade_no);
        if (!$result_data) {
            exit('FAIL');
        }
        $Order = new Order();
        $Order::startTrans();
        $order_info = $result_data;//订单信息
        try {
            $chang_data               = array(
                'pay_state'      => 20,//支付状态
                'pay_style'      => 30,//支付方式
                'pay_time'       => strtotime($data['gmt_payment']),//支付完成时间
                'payment_price'  => $data['buyer_pay_amount'],//支付金额
                'transaction_id' => $data['trade_no'],//微信支付订单号
                'notify_json'    => $data,
                'openid'         => $data['buyer_id'],
            );
            $chang_data['need_price'] = bcsub($order_info['total_price'], $chang_data['payment_price'], 2);
            $result                   = $Order->where([['order_id', '=', $order_info['order_id']]])->update($chang_data);
            if ($result) {
                $Order::commitTrans();
                exit("SUCCESS");
            }
            throw new Exception('操作失败');
        } catch (\Exception $exception) {
            $Order::rollbackTrans();
            exit("FAIL");
        }
    }


    public function authAliOrder(string $out_trade_no, string $trade_no)
    {
        if (!$out_trade_no || !$trade_no) {
            return false;
        }
        $AliPayModel = new AopClient ();
        $Order       = new Order();
        $request     = new AlipayTradeQueryRequest();
        $order_info  = $Order->where([['order_number', '=', $out_trade_no]])->find();
        if (!$order_info) {
            return false;
        }
        $AliPayModel->gatewayUrl         = 'https://openapi.alipay.com/gateway.do';
        $AliPayModel->appId              = config('alipay.app_id');
        $AliPayModel->rsaPrivateKey      = config('alipay.private_key');//'请填写开发者私钥去头去尾去回车,一行字符串'
        $AliPayModel->alipayrsaPublicKey = config('alipay.public_key');//'请填写支付宝公钥,一行字符串'
        $AliPayModel->apiVersion         = '1.0';
        $AliPayModel->signType           = 'RSA2';
        $AliPayModel->postCharset        = 'utf-8';
        $AliPayModel->format             = 'json';
        $request->setBizContent(json_encode(['out_trade_no' => $out_trade_no, 'trade_no' => $trade_no]));
        $result       = $AliPayModel->execute($request);
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode   = $result->$responseNode->code;
        if (!empty($resultCode) && $resultCode == 10000) {
            return $order_info;
        }
        return false;
    }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
thinkphp5 可以通过支付开放平台的 SDK 来对接支付支付功能。首先,我们需要在 thinkphp5 的项目中引入支付 SDK,可以通过 Composer 来安装 SDK,或者手动下载 SDK 的包来引入。接下来,我们需要在项目中配置支付支付相关的参数,如支付AppID、App 私钥、支付公钥等。这些参数可以在支付开放平台开发者中心进行获取。 在配置好参数后,我们可以在 thinkphp5 的控制器中编写代码来实现支付支付的功能。一般来说,支付支付的流程包括生成支付订单、跳转到支付页面、支付成功回调等步骤。我们可以通过调用支付 SDK 提供的相关方法来完成这些步骤。 首先,我们可以使用 SDK 提供的方法来生成支付订单,并将订单信息保存在数据库或其他地方。然后,我们可以使用 SDK 提供的方法来生成支付表单,将用户重定向到支付支付页面上。用户在支付页面上完成支付后,支付会将支付结果返回给我们的网站,我们可以通过配置支付回调地址,并编写回调方法来接收支付结果。 在接收到支付结果后,我们可以根据支付结果更新订单的状态,并做相应的业务逻辑处理。例如,如果支付成功,我们可以将订单状态改为已支付,并向用户展示支付成功的页面。 综上所述,通过引入支付 SDK,配置相关参数,编写相应的代码,我们就可以在 thinkphp5 中实现支付支付功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值