zoukankan      html  css  js  c++  java
  • yii2下使用支付宝

    最近入坑了yii2 感觉是个很强大的框架。使用yii做支付宝的移动支付的时候出了点问题,记录下来避免以后忘记了。

    使用的是支付宝立即到账的功能,网上很多集成好的接口我就不重复了,找不到的话github上有。说一下下载下来后需要修改的地方。

    下载下来的应该是这些文件。我这里使用的是yii2的基础框架,首先把解压好的文件夹放在网站根目录下。

    首先打开alipaypay.php

    这两个地方要对应的修改成appyii2_alipay 和 appyii2_alipayAlipaysubmit

    也就是把frontend替换成app

    其余文件也是这样就不赘述了

    修改后市这样的

    此外要注意AlipayCore.php中

    这里也要修改成

    这里就是我之前一直没有成功的原因。

    之后就只用修改alipaypay.php即可

    这里是你自己在支付宝开放平台申请的,填上即可。

    这里是你对应的同步回掉和异步回掉地址,注意一定是要公网可以访问,不能有参数和localhost,因此建议把路径替换成index.php/order/return这样

    网上我学习的教程带有?r=这样的形式,我没验证过是否可以

    查看支付宝文档可以知道,异步回掉是保证成功的,因此可以单独只写异步回掉,也可以把异步回掉同步回掉均写一遍。

    这个函数是传递一些支付宝必要的参数,具体可以查看文档,这里我也不赘述了,各位可以根据自己的需要修改。以上是支付宝类需要修改的地方,各位可以根据自己的实际情况进行修改。

    接下来就是写自己的action方法了

    首先,支付宝的异步回掉需要关掉csrf,如果有进行了登录验证最好关掉登录验证

    上图就是关闭csrf的方法

    关闭登录验证可以直接使用access

          $total = 0.01;//round($total,2);
             $order_id = 123123123;//订单号,必须唯一
             $gift_name = "租赁书籍";
             $money = $total;
             $body = "租赁书籍";
             $show_url = 'lcoalhost';
             $alipay = new AlipayPay();
             $html = $alipay->requestPay($order_id, $gift_name, $money, $body, $show_url);
          echo $html;

    注意订单号必须唯一,不然后一个订单会直接显示已经付过款,其余参数可以查询手册

    异步回掉

    $alipay = new AlipayPay();$verify_result = $alipay->verifyNotify();
            if ($verify_result) {//验证成功
                //商户订单号
                $out_trade_no = Yii::$app->request->post('out_trade_no');
                //交易状态
                $trade_status = Yii::$app->request->post('trade_status');
                if($trade_status == 'TRADE_FINISHED'||$trade_status == 'TRADE_SUCCESS') 
                {
                    //自己的处理代码
                }
                
                //返回状态
                return "success";
            } else {
                //验证失败
                return "fail";
            }

    同步回掉

    //判断结果,跳转到不同页面
             $alipay = new AlipayPay();$result = $alipay->verifyReturn();
    
            if ($result) {
                $success = $_GET['trade_status'];
                $out_trade_no = $_GET['out_trade_no'];
                if ($success == 'TRADE_SUCCESS'||$success == 'TRADE_FINISHED') {
                    //自己的代码
                } else {
                    echo 'no';
                }
            }
            else {
                echo 'fail';
            }

    这个回掉挺简单的,主要是用来处理付款成功后的一些,例如修改付款状态啊什么的,主要是异步起作用,同步因为各种原因可能会出问题。

    以上应该是全部的要点了

  • 相关阅读:
    Android 四大组件 (二) Service 使用
    使用fiddler抓手机端http数据包
    解决问题:保存图片到本地文件夹后,在图库里看不到保存的图片问题。
    Android 四大组件 (一) Activity 生命周期
    第二次裸辞_潜伏期_一些感想
    最近的一些感想(关于移动客户端开发android,ios)
    错误:类型 'System.Object' 未定义或者不能引入项目
    easyui换主题,并记录在cookie.以及cookie作用域介绍
    VS发布报错 "未能将文件……复制到……"
    VS2013修改模板,增加类文件的头注释
  • 原文地址:https://www.cnblogs.com/icysnow/p/5512250.html
Copyright © 2011-2022 走看看