zoukankan      html  css  js  c++  java
  • omnipay支付--支付宝支付

      最近负责的项目事关支付宝APP支付 也踩了一些坑   这边记录下

    以下代码基于laravel框架下:

    生成APP支付参数:

        $gateway = $this->getGateway();
    
            $request = $gateway->purchase();
            $request->setBizContent([
                'subject'      => '',//产品描述
                'out_trade_no' => '',//本地订单号
                'total_amount' => '',//支付金额 这里无需处理分位问题
                'product_code' => 'QUICK_MSECURITY_PAY',//销售产品码,商家和支付宝签约的产品码,为固定值
            ]);
    
            //发送请求
            $response = $request->send();
    
            //获取支付路径
            $orderString = $response->getOrderString();
            /*
               *这里获取的参数 传给app前端由它去调用支付
            */

    回调处理:

    官方文档是这样写的:

    $request = $gateway->completePurchase();
    $request->setParams($request);
    
    /**
     * @var LegacyCompletePurchaseResponse $response
     */
    try {
        $response = $request->send();
        
        if($response->isPaid()){
            /**
             * Payment is successful
             */
            die('success'); //The response should be 'success' only
        }else{
            /**
             * Payment is not successful
             */
            die('fail');
        }
    } catch (Exception $e) {
        /**
         * Payment is not successful
         */
        die('fail');
    }

    然而我这样写后  一直导致回调过来无法执行相应代码  看了下日志  一直报函数错误  说setParams参数有问题   无奈到处百度  最后是在composer包里查看测试示例  查看到这样写法:

    $response = $gateway->completePurchase(['params' => $request])->send();

    这样改正以后 再不会报语法问题了  回调也成功同步了 

    顺带说一下,这里的isPaid方法里面的代码是这样的:

    if (array_get($this->data, 'trade_status')) {
                if (array_get($this->data, 'trade_status') == 'TRADE_SUCCESS') {
                    return true;
                } elseif (array_get($this->data, 'trade_status') == 'TRADE_FINISHED') {
                    return true;
                } else {
                    return false;
                }
            } elseif (array_get($this->data, 'code') == '10000') {
                return true;
            } else {
                return false;
            }

    说明它已经验证了支付状态  所以可以以此判断是否支付成功.

    查询:

    $options = [
                    'out_trade_no' => $data['order_no']
                ];//用本地订单号查询
    
    $options = [
                    'trade_no' => $data['trade_no']
                ];//支付宝订单号查询
    
    //查询订单
    $request = $gateway->query();
            $request->setBizContent($options);
    
            $response = $request->send();
            //查询成功获取返回信息数据
            if($response->isSuccessful()) {
                return $response->getAlipayResponse();
            } else {
                return FALSE;
            }

    这一段在github说明里是不存在的,是在testsAopF2FGatewayTest类下testQuery方法才看到是这样用的 醉了...

    每次调用都是要创建相应的gateway(网关) 的,这里封装成公用方法 创建网关的时候会指定支付方式。目前只做了App支付这一种 后续做其他的支付方式再记录吧

  • 相关阅读:
    ogre terrain
    error list
    Basic Turtorial 3( Ogre wiki)
    操作 Wave 文件(3): 接触 mmio 系列函数
    操作 Wave 文件(5): 获取 Wave 文件的格式信息
    操作 Wave 文件(6): 获取 Wave 文件的波形数据
    关于动态数组指针操作的两个例子
    操作 Wave 文件(7): 建立一个空的 Wave 文件(三种方法)
    操作 Wave 文件(8): 使用 TMediaPlayer 录制 wav 文件
    操作 Wave 文件(10): 输入输出设备与格式支持
  • 原文地址:https://www.cnblogs.com/tudou1223/p/9758762.html
Copyright © 2011-2022 走看看