yii2 支付宝支付教程 [ 2.0 版本 ]

支付宝支付流程个人理解大致就这三步

1.前台页面将支付信息数据通过立即支付按钮 ajax提交到订单处理层

2.在订单处理层引用支付宝的接口 将支付数据写入 支付宝会抛出一个from表单 action 到支付宝的付款页面

3.用户完成付款后会调用到同步回调和异步回调进行业务逻辑的处理

第一步 前端界面

/*支付按钮点击*/

$(‘body‘).on(‘click‘, ‘.payBtn‘, function () {

var money = $(‘.moneylist .current‘).attr(‘data-money‘);

var author_id = $(this).attr(‘data-author-id‘);

var itemid = $(this).attr(‘data-itemid‘);

var pay_type = $(‘.payType .current‘).attr(‘data-pay-type‘);

//pay_type 是区分微信和支付宝的 先无视掉pay_type ==1 的

if (pay_type == 1) {

//pay_type 是区分微信和支付宝的 先无视掉pay_type ==1 的

} else {

$.ajax({

type: "POST",

url: "/alipay/pay",//这个就是进入到第二步将数据带入支付宝类库进行处理

data: params,//数据

async: false,

success: function success(data) {

$(‘#payform‘).html(data);

}

});

}

});

第二步 将支付数据带入到支付宝类库中处理

先放一张数据库字段的图片

/**

* Created by PhpStorm.

* User: jayrui612

* Date: 2017/5/11

* Time: 14:27

*/

namespace frontend\controllers;

use frontend\components\payment\alipay\lib\AlipaySubmit;

use frontend\components\payment\alipay\lib\AlipayNotify;

use common\models\SanDbSponsor;

use yii\web\Controller;

use Yii;

class AlipayController extends Controller

{

public $enableCsrfValidation = false;

public function actionPay()

{

//商户订单号,商户网站订单系统中唯一订单号,必填

$out_trade_no = $_POST[‘WIDout_trade_no‘];

//订单名称,必填

$subject = $_POST[‘WIDsubject‘];

//付款金额,必填

$total_fee = $_POST[‘WIDtotal_amount‘];

//商品描述,可空

$body = $_POST[‘WIDbody‘];

//创建支付订单

$db = Yii::$app->db;

try {

$sponsorData = $_POST[‘sponsor_params‘];

$sponsorData[‘pay_type‘] = 2; // 支付方式。(1:微信 ,2:支付宝)

$sponsorData[‘pay_status‘] = 0; // 支付状态。(0:未支付,1:支付成功,2:支付失败)

$sponsorData[‘price‘] = $total_fee;

$sponsorData[‘out_trade_no‘] = $out_trade_no;

$sponsorData[‘create_time‘] = time();

$db->createCommand()->insert(‘supe_sponsor‘, $sponsorData)->execute();

} catch(\Exception $e) {

//throw $e;

return $this->redirect(Yii::$app->urlManager->createUrl(["news/detail", ‘itemid‘ => $_POST[‘sponsor_params‘][‘itemid‘]]))->send();

}

$parameter = array(

"service" => Yii::$app->params[‘pc_alipay‘][‘service‘],

"partner" => Yii::$app->params[‘pc_alipay‘][‘partner‘],

"seller_id" => Yii::$app->params[‘pc_alipay‘][‘seller_id‘],

"payment_type"=> Yii::$app->params[‘pc_alipay‘][‘payment_type‘],

"notify_url"=> Yii::$app->params[‘pc_alipay‘][‘notify_url‘],

"return_url"=> Yii::$app->params[‘pc_alipay‘][‘return_url‘],

"anti_phishing_key"=>Yii::$app->params[‘pc_alipay‘][‘anti_phishing_key‘],

"exter_invoke_ip"=>Yii::$app->params[‘pc_alipay‘][‘exter_invoke_ip‘],

"out_trade_no"=> $out_trade_no,

"subject"=> $subject,

"total_fee"=> $total_fee,

"body"=> $body,

"_input_charset" => trim(strtolower(Yii::$app->params[‘pc_alipay‘][‘input_charset‘]))

);

//建立请求

$alipaySubmit = new AlipaySubmit(Yii::$app->params[‘pc_alipay‘]);

$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");

echo $html_text;

}

第三步 用户付款 同步回调和异步回调

这里做下说明 支付付款页面 用户付款后会自动调用 同步回调actionReturn_sync_ali 和异步回调actionReturn_async_ali

同步回调是做页面跳转之类的事情 异步回调是主要的 做订单状态的逻辑操作

下面的方法也是 在class AlipayController extends Controller下面

/**

* 支付宝同步回调通知

*/

public function actionReturn_sync_ali()

{

$alipayNotify = new AlipayNotify(Yii::$app->params[‘pc_alipay‘]);

$verify_result = $alipayNotify->verifyReturn();

if($verify_result) {//验证成功

//商户订单号

$out_trade_no = htmlspecialchars($_GET[‘out_trade_no‘]);

//收款方id

$seller_id = htmlspecialchars($_GET[‘seller_id‘]);

//支付宝交易号

$trade_no = $_GET[‘trade_no‘];

//交易状态

$trade_status = $_GET[‘trade_status‘];

if($trade_status == ‘TRADE_FINISHED‘ || $trade_status == ‘TRADE_SUCCESS‘) {

return $this->redirect(Yii::$app->urlManager->createUrl(["news/detail"]))->send();

} else {

echo ‘‘;

}

}

else {

echo "验证失败";

}

}

/**

* 支付宝异步回调地址

*/

public function actionReturn_async_ali()

{

$alipayNotify = new AlipayNotify(Yii::$app->params[‘pc_alipay‘]);

$verify_result = $alipayNotify->verifyNotify();

if($verify_result) {//验证成功

// 本站订单号

$out_trade_no = $_POST[‘out_trade_no‘];

// 支付宝交易号

$trade_no = $_POST[‘trade_no‘];

// 交易状态

$trade_status = $_POST[‘trade_status‘];

// 订单金额

$total_amount = $_POST[‘total_fee‘];

// 实收金额

$receipt_amount = $_POST[‘price‘];

// 回调通知的发送时间

$notify_time = $_POST[‘notify_time‘];

if ($_POST[‘trade_status‘] == ‘TRADE_SUCCESS‘) {

//判断该笔订单是否在商户网站中已经做过处理

//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

//请务必判断请求时的total_amount与通知时获取的total_fee为一致的

//如果有做过处理,不执行商户的业务程序

//注意:

//付款完成后,支付宝系统发送该交易状态通知

if ($_POST[‘seller_id‘] == Yii::$app->params[‘pc_alipay‘][‘seller_id‘]

&& $receipt_amount != 0 && ($total_amount == $receipt_amount))

{

$hasRecord = SanDbSponsor::find()

->where([‘out_trade_no‘ => $out_trade_no])

->one();

// update

if ($hasRecord && $hasRecord->pay_status != 1)

{

$hasRecord->pay_status = 1; // 支付状态。(1:支付成功 )

$hasRecord->create_time = strtotime($notify_time);

$hasRecord->save();

}

}

}

//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

echo "success";//请不要修改或删除

} else {

//验证失败

echo "fail";//请不要修改或删除

}

}

大致就是这样了 还有配置文件和支付宝的类库文件没有贴上

return [

// PC 端 赞赏支付宝配置

‘pc_alipay‘ => [

// 签约账号

‘partner‘ => ‘111111‘,

// 收款支付宝账号,一般情况下收款账号就是签约账号

‘seller_id‘ => ‘111111‘,

//商户的私钥,

‘private_key‘ => ‘xxxxxxxx‘,

//支付宝的公钥

‘alipay_public_key‘ => ‘yyyyyyyyyyyyyy‘,

// 异步通知页面路径

‘notify_url‘ => ‘http://www.jay.com/alipay/return_async_ali.php‘,

// 页面跳转同步通知页面路径

‘return_url‘ => "http://www.jay.com/alipay/return_sync_ali.php",

//签名方式

‘sign_type‘ => strtoupper(‘RSA‘),

//字符编码格式 目前支持 gbk 或 utf-8

‘input_charset‘ => strtolower(‘utf-8‘),

// ca证书路径地址,用于curl中ssl校验

// 请保证cacert.pem文件在当前文件夹目录中

‘cacert‘ => getcwd().‘\\cacert.pem‘,

// 访问模式

‘transport‘ => ‘http‘,

// 支付类型 ,无需修改

‘payment_type‘ => ‘1‘,

// 产品类型,无需修改

‘service‘ => "create_direct_pay_by_user",

// 以下防钓鱼信息,如果没开通防钓鱼功能,为空即可

‘anti_phishing_key‘ => ‘‘,

‘exter_invoke_ip‘ => ‘‘

],

];

类库文件的截图

文章转自他人,文章写的很清晰,只供本人学习之用

php yii2支付宝开发,yii2 支付宝支付教程 [ 2.0 版本 ]相关推荐

  1. yii2设置session时间_关于 Swoft 2.0 版本用 Redis 存储 session 时配置问题

    Swoft 2.0 在 session 配置上和 1.0 还是有一些不同地方,而关于这些在 github 上完全没有任何说明,甚至连文档也没有.经过逐步梳理源代码(其中要理解他的 "注解&q ...

  2. 喜大普奔,全球领先的应用开发平台-应用之星3.0版本已经正式发布

    好消息,全球领先的app开发平台应用之星平台3.0版本已经全面升级上线,从网站页面,开发工具和网站服务等进行全面升级,希望对开发者带来全新的开发体验. 下面跟大家掰一掰有哪些变化. 第一:网站采用扁平 ...

  3. Kotlin和Java混合开发总结(基于Kotlin1.3.0版本)

    我本来是不想学习kotlin的,但是现在的形势,很多公司都在使用kotlin开发,可以说学会kotlin也是无奈之举,既然是潮流,谷歌也在大力推广,所以还是只能硬着头皮逼迫自己学一下,也能更快适应公司 ...

  4. mysql8安装版安装教程_MySQL8.0版本安装教程

    这几天被各种环境的配置搞疯了,查询了很多资料,也算有点经验,对于Mysql的安装,以及可能会出现的问题做出解决方案. 我这里讲的是zip的安装教程. 1.进入官网后的界面是: 3.点击进去后,选择第一 ...

  5. php yii2支付宝开发,网站支付宝支付原理及yii2中集成使用教程分享

    本文我们主要和大家分享网站支付宝支付原理及yii2中集成使用教程,首先我们需要申请支付宝入驻,具体方法可以参照网址:https://open.alipay.com/platform/home.htm ...

  6. 支付宝开发 - 扫码支付

    一.支付场景 用户使用支付宝钱包上的"扫一扫"功能,扫码商户针对每个订单实时生成的订单二维码,并在手机端确认支付. 二.调用流程 图2.1 支付宝扫码支付调用流程 a. 商户系统调 ...

  7. STM32CubeMX系列教程 5.0版本环境开发——1.工程搭建

    STM32Cubemx 是一个便捷,方便管理的软件平台.极大的优化了开发的过程,尽管很多人对此不适应.它包括了ST产品的每个系列除了STM8.平台包括了STM32Cube 硬件抽象层(一个STM32抽 ...

  8. 支付宝开发 ——第三方支付

    支付宝开发 第三方支付 在线支付 在线支付是指卖方与买方通过因特网上的电子商务网站进行交易时,银行为其提供网上资金结算服务的一种业务.它为企业和个人提供了一个安全.快捷.方便的电子商务应用环境和网上资 ...

  9. android 8.0 支付宝,支付宝8.0版本入局NFC助力智慧交通

    [导读]支付宝钱包官方介绍称,8.0版本新增了对北京一卡通的NFC支持.这意味着,用户可以通过支付宝钱包读取公交卡信息(包括余额.发行商.卡号等),并进行支付. 此前国内三大运营商已经陆续推出了支持N ...

最新文章

  1. Keras图像分割实战:数据整理分割、自定义数据生成器、模型训练
  2. onkeypress属性添加报错_亚马逊运营过程中listing常见报错及应对策略汇总
  3. OAuth2.0授权码模式学习
  4. oracle错误代码12516,ORA-12516错误解决
  5. [渝粤教育] 中国地质大学 工业卫生技术 复习题 (2)
  6. 百万个小油馕跨越3000公里来支援!西安加油!
  7. resultmap拿不到数据_英雄联盟S10:半决赛数据告诉你huanfeng有多强
  8. git回退历史版本无法上传_Git实用教程(四) | Git本地库操作(查看提交历史、版本前进回退)...
  9. 直方图均衡图像对比度(histogram equalization)PYTHON+OPENCV2
  10. 操作系统 第二部分 进程管理(三)
  11. PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束
  12. 用RDA方式同步SQLCE与SQL SERVER数据库
  13. Win10系统更新后共享打印机无法打印
  14. 简易的机器人聊天_如何制作一个简单的聊天机器人
  15. 添加打印机,本地打印后台处理程序服务没有运行
  16. PIPIOJ1166PIPI的棋盘
  17. 易经64卦富含的人生哲理
  18. android系统经纬度,android系统获取经纬度总是0值,求解决
  19. 最新消息!又一省份发布2020软考报名通知!
  20. 最小二乘法拟合直线——MATLAB和Qt-C++实现

热门文章

  1. Linux下Flash-LED的处理
  2. 大数据调度平台Airflow(八):Airflow分布式集群搭建及测试
  3. 大数据调度平台Airflow(一):什么是Airflow
  4. 2021年大数据常用语言Scala(十七):基础语法学习 Set
  5. 在PC机上运行的linux系统是,Docker Desktop如何在Windows计算机上运行linux容...
  6. 获取DOM节点的几种方式
  7. C++ 笔记(12)— 判断(if/if...else/switch、条件运算符)
  8. 经1503 20151453 张开拓
  9. C语言对mysql数据库的操作
  10. c++标准库 及 命名空间std