本文实例讲述了php实现的支付宝网页支付功能。分享给大家供大家参考,具体如下:

1.提交支付请求

require_once './payment/zfb/pagepay/service/AlipayTradeService.php';

require_once './payment/zfb/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';

$payInfo=Db::name('pay_type')->where(['pay_id'=>1])->find();

$zfb=json_decode($payInfo['pay_json'],true);

$config=[

'app_id'=>$zfb['app_id'],

'merchant_private_key'=>$zfb['merchant_private_key'],

'notify_url'=>config('z_notify_url'),

'return_url'=>config('z_return_url'),

'charset'=>config('charset'),

'sign_type'=>config('sign_type'),

'gatewayUrl'=>config('gatewayUrl'),

'alipay_public_key'=>$zfb['alipay_public_key']

];

//商品订单号

$out_trade_no=$orderData['order_number'];

//订单名称,必填

$subject='充值订单';

//付款金额

$total_amount=$money;

//商品描述

$body = $out_trade_no . '-' . $this->agent_id.'-'.$money;

$payRequestBuilder = new \AlipayTradePagePayContentBuilder();

$payRequestBuilder->setBody($body);

$payRequestBuilder->setSubject($subject);

$payRequestBuilder->setTotalAmount($total_amount);

$payRequestBuilder->setOutTradeNo($out_trade_no);

$aop = new \AlipayTradeService($config);

$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);

echo $response;

2.异步回调支付宝参数认证

$pay=Db::name('pay_type')->where(['pay_id'=>1])->find();

$zfb=json_decode($pay['pay_json'],true);

$config = [

'app_id' => $zfb['app_id'],

'merchant_private_key' => $zfb['merchant_private_key'],

'notify_url' => config('z_notify_url'),

'return_url' => config('z_return_url'),

'charset' => config('charset'),

'sign_type' => config('sign_type'),

'gatewayUrl' => config('gatewayUrl'),

'alipay_public_key' => $zfb['alipay_public_key']

];

$arr=$_POST;

$alipaySevice = new \AlipayTradeService($config);

$alipaySevice->writeLog(var_export($_POST,true));

$result = $alipaySevice->check($arr);

/* 实际验证过程建议商户添加以下校验。

1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,

2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),

3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)

4、验证app_id是否为该商户本身。

*/

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

/

//请在这里加上商户的业务逻辑程序代

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

//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

//商户订单号

$out_trade_no = $_POST['out_trade_no'];

//支付宝交易号

$trade_no = $_POST['trade_no'];

//交易状态

$trade_status = $_POST['trade_status'];

//交易金额

$total_amount = $_POST['total_amount'];

if($_POST['trade_status'] == 'TRADE_FINISHED') {

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

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

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

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

//注意:

//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

} else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {

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

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

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

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

//注意:

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

//此处应该更新一下订单状态,商户自行增删操作

这里写你的逻辑程序

}

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

echo 'success';

}else {

//验证失败

echo "fail";

}

}

3.同步回调页面跳转处理  同步只是做一个跳转处理 不要写任何数据处理

$pay=Db::name('pay_type')->where(['pay_id'=>1])->find();

$zfb=json_decode($pay['pay_json'],true);

$config = [

'app_id' => $zfb['app_id'],

'merchant_private_key' => $zfb['merchant_private_key'],

'notify_url' => config('z_notify_url'),

'return_url' => config('z_return_url'),

'charset' => config('charset'),

'sign_type' => config('sign_type'),

'gatewayUrl' => config('gatewayUrl'),

'alipay_public_key' => $zfb['alipay_public_key']

];

$arr=$_GET;

$alipaySevice = new \AlipayTradeService($config);

$result = $alipaySevice->check($arr);

/* 实际验证过程建议商户添加以下校验。

1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,

2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),

3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)

4、验证app_id是否为该商户本身。

*/

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

/

//请在这里加上商户的业务逻辑程序代码

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

//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

//商户订单号

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

//支付宝交易号

$trade_no = htmlspecialchars($_GET['trade_no']);

$this->success("支付成功",url('Index/index'));

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

/

}

else {

//验证失败

echo "验证失败";

}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

php tp 支付宝 支付,php实现的支付宝网页支付功能示例【基于TP5框架】相关推荐

  1. 支付宝---支付功能 支付宝即时到帐接口的python实现,示例采用django框架

    支付宝即时到帐接口的python实现,示例采用django框架 支付宝即时到帐接口的python实现,示例采用django框架 因工作需要研究了支付宝即时到帐接口,并成功应用到网站上,把过程拿出来分享 ...

  2. php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】

    本文实例讲述了PHP实现的微信APP支付功能.分享给大家供大家参考,具体如下: 1.进行支付请求 他给的DEMO 用的时候有时候会报错 1)我遇到的情况 把  WxPay.Api.php这个文件的 p ...

  3. 微信支付之微信公众号网页支付(各种总结)

    微信支付除了坑,就是坑!!! 网上也还是好多吐槽的,各种签名问题,文档也比较乱.重点是,安卓最后报错就只报chooseWXPay failed.什么具体错误也不显示.最后还是喊朋友的苹果机远程帮忙测试 ...

  4. 微信接口支付接口html,微信 - JSAPI 网页支付

    JSAPI 网页支付 说明 使用前先再 XorPay 后台 设置域名支付目录,最多设置5个支付授权目录, 且域名必须通过 ICP 备案 先通过 获取openid 接口获得用户 openid 然后请求接 ...

  5. php实现网站支付,php银联网页支付实现方法

    php银联网页支付实现方法 php银联网页支付实现方法,实例分析了php操作银联网支付接口的技巧,具有一定参考借鉴价值,需要的朋友可以参考下. 这里介绍的`银联WAP支付功能,仅限消费功能. 1. P ...

  6. 支付宝支付 第六集:生成支付二维码

    支付宝支付 第六集:生成支付二维码 一.资源 支付宝沙箱显示APP-ID错误:我的原因是支付宝网关地址写错了 支付宝沙箱环境报 invalid-app-id 错误原因: 无效的AppID参数 错误 支 ...

  7. java 支付宝h5网页支付接口,移动端h5网页调用支付宝支付接口

    领导第一次让我做h5支付宝支付的时候,去了支付宝开放平台,一顿上上下下左左右右,看完了长呼一口气.这个支付好像没我啥事儿啊!小伙伴儿们自行查看:https://opendocs.alipay.com/ ...

  8. 移动app部分机型无法唤起h5支付宝支付_案例分析:H5支付交互体验设计

    随着互联网技术和手机软硬件的高速发展,手机的使用场景已经融入到日常生活的点滴中.购物用淘宝下单,饿了在美团点外卖,出行滴滴一下--这些关联衣食住行的应用,都离不开一个核心环节:线上支付. 手机支付通常 ...

  9. python支付程序源码_python项目中实现支付宝网页支付

    支付流程 在一次项目中需要引入支付宝接口实现支付宝支付,使用场景如下: 用户在我方商户系统中选择了购买商品,我方商户系统生成一张支付订单,用户点击订单的支付按钮后,页面会跳转到一个支付二维码的界面. ...

最新文章

  1. Scala模式匹配细节说明
  2. [计组]压缩BCD码指二进制编码的十进制
  3. c语言定义的几种易错的说明
  4. javascript 面试题之一
  5. ipad如何与计算机连接网络连接不上,平板电脑网络连接不上怎么办
  6. mysql-5.6.24-win32.zip 下载 安装 配置 创建数据库
  7. ISA 对比 PCI(ISA vs PCI)
  8. nbu备份本机oracle,大话nbu九(nbu异机备份恢复oracle)
  9. 运放放大倍数计算公式_16个问题讲透了运算放大器基础的知识点
  10. 计算机一级荷塘月色操作题,《荷塘月色》课后习题及答案
  11. 2023届计算机保研面试基础专业问题(数据结构、算法、计算机语言、计算机网络、数据库、操作系统、数学)
  12. MySQL生成自增的流水号
  13. bootstrapTable动态渲染数据获取
  14. d3dcompiler_47.dll缺失怎么修复?D3DCompiler_47.dll修复工具下载
  15. DGA 域名生成和检测算法
  16. 手游运营需网络文化经营许可证?1000万资本金门槛
  17. j计算机专业毕业论文摘要,★计算机毕业论文摘要范文计算机毕业论文摘要写(6页)-原创力文档...
  18. FIR滤波器系数重载
  19. 浏览器证书过期,你的时钟快了
  20. js控制页面div盒子移动

热门文章

  1. centos mysql php tomcat_Linux 安装JDK Tomcat MySQL的教程(使用Mac远程访问)
  2. vue 兄弟组件之间的传值
  3. 一文通读传感器到算法原理,机器人、视觉避障(附源码)
  4. vlookup练习_大胆合并吧!VLOOKUP坐字法专做单元格合并查找
  5. js如何获取html图片,JS/JQuery获取网页或文章或某DIV所有图片
  6. linux chattr 无权限,从零开始学习Linux(二十八):文件权限之chattr权限
  7. 【APICloud系列|25】 easeChat模块(环信-即时通讯)的实现
  8. html中文字过长 自动隐藏,css 实现文字过长自动隐藏功能
  9. 重置手机_【轻松办税】ITS客户端申报密码重置不会操作?看过来,3分钟包你会!...
  10. Slip.js – 在触摸屏上实现 Swipe 对列表重新排序