thinkphp支付宝app支付h5支付

<?php
namespace app\api\service;
alipay放在extend文件夹下

//引入
require_once app()->getRootPath().'extend'.DIRECTORY_SEPARATOR.'alipay'.DIRECTORY_SEPARATOR.'AopSdk.php';


    // app - 支付宝支付  金额 订单号  回调地址
    public function alipay($total_amount, $out_trade_no, $notify_url)
    {    
        //获取配置
        $config = config('aliPay');

        $notify_url = '域名'.$notify_url;
        //file_put_contents("8888888888888888888888.txt",$notify_url);
        // code...
        try {
            // 实例化 AopClient
            $aop = new \AopClient();

            // 支付宝网关地址
            $aop->gatewayUrl = $config['gatewayUrl'];

            // 支付宝APPID
            $aop->appId = $config['appId'];

            // 开发者私钥
            $aop->rsaPrivateKey = $config['rsaPrivateKey'];

            // 返回格式
            $aop->format = $config['format'];

            // 字符编码utf8
            $aop->charset = $config['charset'];

            // 加密方式
            $aop->signType = $config['signType'];

            // 请填写支付宝公钥,一行字符串
            $aop->alipayrsaPublicKey = $config['alipayrsaPublicKey'];

            //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
            $request = new \AlipayTradeAppPayRequest();
  
            // 下单数据
            $bizcontent = [];
            $bizcontent['body'] = lang('购买商品')."-".$out_trade_no; // 交易的具体描述信息。
            $bizcontent['subject'] = lang('购买商品,订单号:').$out_trade_no; // 商品的标题/交易标题/订单标题/订单关键字
            $bizcontent['out_trade_no'] = "$out_trade_no"; // 唯一订单号
            $bizcontent['timeout_express'] = '30m'; // 该笔订单允许的最晚付款时间,逾期将关闭交易
            $bizcontent['total_amount'] = (String) round($total_amount/100,2); // 订单总金额,单位为元
            $bizcontent['product_code'] = 'QUICK_MSECURITY_PAY'; // 销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
            $bizcontent = json_encode($bizcontent, 256);
        
            // 回调地址
            $request->setNotifyUrl($notify_url);

            // 设置下单数据
            $request->setBizContent($bizcontent);

            //这里和普通的接口调用不同,使用的是sdkExecute
            $response = $aop->sdkExecute($request);
            if(!$response){
                $data = [];
                $data['code'] = 201;
                $data['msg'] = lang('error');
                return $data;
            }

            $_data = str_replace("&amp;","&",htmlspecialchars($response));

            $data = [];
            $data['code'] = 200;
            $data['msg'] = lang('success');
            $data['data'] = $_data;
            return $data;
        } catch (\Exception $e) {
            $data = [];
            $data['code'] = 201;
            $data['msg'] = lang('error');
            return $data;
        }
    }


    // h5 - 支付宝支付
    public function alih5pay($total_amount, $out_trade_no, $notify_url)
    {   
        
      
   
        $notify_url = '域名'.$notify_url;
        $config = config('aliPay');

        // code...
        try {
            // 实例化 AopClient
            $aop = new \AopClient();

            // 支付宝网关地址
            $aop->gatewayUrl = $config['gatewayUrl'];

            // 支付宝APPID
            $aop->appId = $config['appId'];

            // 开发者私钥
            $aop->rsaPrivateKey = $config['rsaPrivateKey'];

            // 返回格式
            $aop->format = $config['format'];

            // 字符编码utf8
            $aop->charset = $config['charset'];

            // 加密方式
            $aop->signType = $config['signType'];

            // 请填写支付宝公钥,一行字符串
            $aop->alipayrsaPublicKey = $config['alipayrsaPublicKey'];

            //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
            $request = new \AlipayTradeWapPayRequest();
        
            // 下单数据
            $bizcontent = [];
            $bizcontent['body'] = lang('购买商品')."-".$out_trade_no; // 交易的具体描述信息。
            $bizcontent['subject'] = lang('购买商品,订单号:').$out_trade_no; // 商品的标题/交易标题/订单标题/订单关键字
            $bizcontent['out_trade_no'] = "$out_trade_no"; // 唯一订单号
            $bizcontent['timeout_express'] = '30m'; // 该笔订单允许的最晚付款时间,逾期将关闭交易
            $bizcontent['total_amount'] = (String) round($total_amount/100,2); // 订单总金额,单位为元
            $bizcontent['product_code'] = 'QUICK_WAP_WAY'; // 销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
            $bizcontent = json_encode($bizcontent, 256);
            

            // 回调地址
            $request->setNotifyUrl("$notify_url");

            // 设置下单数据
            $request->setBizContent($bizcontent);

       
            //这里和普通的接口调用不同,使用的是sdkExecute
            $response = $aop->pageExecute($request);

            if(!$response){
                $data = [];
                $data['code'] = 201;
                $data['msg'] = lang('error');
                return $data;
            }
            $data['code'] = 200;
            $data['msg'] = lang('success');
            $data['data'] = $response;
            return $data;
        } catch (\Exception $e) {
            $data = [];
            $data['code'] = 201;
            $data['msg'] = lang('error');
            return $data;
        }
    }
    // 订单回调 - ali - 藏品购买
    public function orderAliNotify()
    {   

        //file_put_contents("1111111112ooo.txt","Runoob");
        
        $param = input();

        // 接收参数
        $out_trade_no = $param['out_trade_no'];// 商户订单号
        $total_amount = $param['total_amount']; //金额
        $app_id = $param['app_id']; // 商户appID

        trace(['app_id'=>$app_id,'out_trade_no'=>$out_trade_no,'total_amount'=>$total_amount], 'aliError');

        unset($_REQUEST['s']);

        $config = config('aliPay');

        // 回调验证
        $aop = new \AopClient;
        $aop->alipayrsaPublicKey = $config['alipayrsaPublicKey'];
        $flag = $aop->rsaCheckV1($_REQUEST, NULL, "RSA2");

        // 格式化请求信息
        $request = json_encode($_REQUEST);

        trace(['post_data'=>$_POST], 'aliError');

        // 验证失败日志记录
        if(!$flag){
            trace('回调验证失败:'.$request, 'aliError');
            exit();
        }

        // 商户app 判断
        if($app_id != config('alipay.appId')){
            trace('appid不正确:'.$request, 'aliError');
            exit();
        }

        // 订单号判断
        if(!$out_trade_no){
            trace('阿里支付-缺少订单号:'.$request, 'aliError');
            exit();
        }

        // 金额判断
        if(!$total_amount){
            trace('阿里支付-缺少金额:'.$request, 'aliError');
            exit();
        }

        if($_REQUEST['trade_status'] == 'TRADE_SUCCESS'){

            // 订单处理
            $service = new NtfOrderService();
            $res = $service->orderMain($param);
            if($res['code'] != 0)
            {
                trace('阿里支付-:'.$res['msg'].$request, 'aliError');
                exit();
            }

            //日志回调
            trace('阿里支付-支付成功:'.$request, 'success');
        }

        // return
        echo 'success';
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

PHP柚子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值