PHP 网页支付支付宝支付接口对接

本文全程使用沙箱测试 真实环境更换配置文件即可

总个小结 : 目前大多数常用接口都比较完善,只要参数传的没毛病,基本对接没啥问题,排排小坑,跑起来就行。下面讲下个人开发步骤

开发前准备

  • 去 蚂蚁金服开放平台 注册账号
  • 入驻

  • (真实环境)
  • 进入 应用列表 签约
  • 然后获取 APPID 以及 公钥 等配置信息 https://openhome.alipay.com/platform/keyManage.htm
  • 下载公钥生成器

  • 打开之后有这个东西
  • 这个公钥就放在账户中心上面就是你的应用公钥,密钥在生成上面的文件夹里。 然后把它们写进代码就OK了!

  • (沙箱测试)
  • 去 蚂蚁金服开放平台 注册账号 (有帐号直接登录)
  • 进入 我的开放平台
  • 添加一个 沙箱应用
  • 从里面获取 这些…
  • 按步骤获取信息 不知道咋整的先放放 下载sdk 看看里面需要啥 要啥整啥
  • 开始下载 正经网址 https://docs.open.alipay.com/270/106291/
  • 下载解压之后大概长这样

差不多就开始撸代码!

  • 这个文件里的demo基本可以满足我们去支付的逻辑
  • 我自己写了个公共函数 所以就复制过来改一改
  • 写个配置项的函数
 /*** 支付宝支付配置参数* @return array*/function pay_ali_ini(){// 获取网站域名(可写死)$http_ = Request::instance()->domain();return array(//应用ID,您的APPID。'app_id' => "您的APPID",//商户私钥'merchant_private_key' => "你的商户私钥",//异步通知地址'notify_url' => $http_ . "/异步通知地址",//同步跳转'return_url' => $http_ . "/同步跳转",//编码格式'charset' => "UTF-8",//签名方式'sign_type'=>"RSA2",//版本'apiVersion' => '1.0',//支付宝网关 (沙箱网关 真实环境要更换 https://openapi.alipay.com/gateway.do)'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。'alipay_public_key' => "你的支付宝公钥",'format' => 'json',);}
  • 然后就写个调用的方法 (参考 pagepay.php)
  • 注意传参
    //商户订单号,商户网站订单系统中唯一订单号,必填$out_trade_no = trim($_POST['WIDout_trade_no']);//订单名称,必填$subject = trim($_POST['WIDsubject']);//付款金额,必填$total_amount = trim($_POST['WIDtotal_amount']);//商品描述,可空$body = trim($_POST['WIDbody']);
  • 传参详情可阅读文档 https://docs.open.alipay.com/api_1/alipay.trade.page.pay/
  • 准备好之后就可以运行了 (瞬间笑了)
  • 小坑两个(手动标红)
  • 坑1 你会在好多地方发现这个函数
  • 所以要给这个 一个 可读写的权限 (chmod -R 777 )
  • 坑2 (仅针对 7.2及以上版本的玩家)
  • 啊哈 因为 each 函数在7.2被废了 (哈哈哈…)
  • 然后就可以为所欲为测试啦~~~

回调地址 (同步?异步?)

  • 这个问题困扰了我许久…
  • 结论 : 同步地址里面就写个简单的判断 ,仅前端提示展示跳转即可 不可作为实际支付依据进行逻辑处理
  • 异步地址用来处理逻辑 可参考这两个文件
  • 个人回调处理
    // Alipay 同步跳转urlpublic function alipayReturnUrl(){$arr = $_GET;$config = pay_ali_ini();require_once $_SERVER['DOCUMENT_ROOT']. '/../api/alipay/pagepay/service/AlipayTradeService.php';$alipaySevice = new \AlipayTradeService($config);$result = $alipaySevice->check($arr);// 获取跳转地址$url = session('pay_url_back');session('pay_url_back', null);if ($result){$this->success('支付验证成功!', $url);}else {//验证失败$this->error('支付验证失败!', $url);}}// Alipay 异步跳转urlpublic function alipayNotifyUrl(){$arr = $_POST;$config = pay_ali_ini();require_once $_SERVER['DOCUMENT_ROOT']. '/../api/alipay/pagepay/service/AlipayTradeService.php';$alipaySevice = new \AlipayTradeService($config);$alipaySevice->writeLog(var_export($_POST,true));$result = $alipaySevice->check($arr);if($result) {//验证成功//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') {//判断该笔订单是否在商户网站中已经做过处理$is_have = Db::name('order_pay')->field('id')->where('order_no', $arr['out_trade_no'])->find();if ($is_have){return false;}//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序// 启动事务Db::startTrans();try{$insert_data = ['create_time' => time(),'out_trade_no' => $arr['out_trade_no'],'gmt_create' => $arr['gmt_create'],'gmt_payment' => $arr['gmt_payment'],'subject' => $arr['subject'],'buyer_id' => $arr['buyer_id'],'body' => isset($arr['body'])?$arr['body']:'','total_amount' => $arr['total_amount'],'receipt_amount' => $arr['receipt_amount'],'fund_bill_list' => $arr['fund_bill_list'],'auth_app_id' => $arr['auth_app_id'],'point_amount' => $arr['point_amount'],'buyer_pay_amount' => $arr['buyer_pay_amount'],'seller_id' => $arr['seller_id'],'trade_status' => $arr['trade_status'],];$insert_id = Db::name('alipay')->insertGetId($insert_data);Db::name('order_pay')->insert(['db_name'=>'alipay', 'order_no' => $arr['out_trade_no'], 'd_id' => $insert_id, 'pay_type' => 'alipay']);// 查询是否在 cmf_goods_order 表中$is_have_order = Db::name('goods_order')->field('order_id')->where('order_no',  $arr['out_trade_no'])->find();if ( $is_have_order ){// 修改订单状态$goods_order_data = ['pay_status' => 2,'modify_time' => time(),'pay_time' => strtotime($arr['gmt_payment']),'order_status' => 3,];//添加任务进度状态$progress_remark = '订单已支付';$task_progress = ['order_id' => $is_have_order['order_id'],'create_time' => time(),'modify_time' => time(),'progress_remark' => $progress_remark];Db::name('task_progress')->insert($task_progress);Db::name('goods_order')->where('order_id', $is_have_order['order_id'])->update($goods_order_data);}$this->doNotify($arr['out_trade_no']);// 提交事务Db::commit();} catch (\Exception $e) {// 回滚事务Db::rollback();return false;}//请务必判断请求时的total_amount与通知时获取的total_fee为一致的//如果有做过处理,不执行商户的业务程序}echo "success"; //请不要修改或删除}else {//验证失败echo "fail";}}

放个大招



输入 人工客服 (一遍不行多输入几遍 就会出来 联系人工客服…)
有问题找技术 盘他!

PHP 网页支付支付宝支付接口对接相关推荐

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

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

  2. 移动端h5网页调用支付宝支付接口

    来源 | https://www.dsiab.com/post/4181 领导第一次让我做h5支付宝支付的时候,去了支付宝开放平台,一顿上上下下左左右右,看完了长呼一口气. 这个支付好像没我啥事儿啊! ...

  3. 支付宝 app接口对接流程上

    最近开发一个app,需要对接支付宝,现在来整理一下流程吧 1.登录蚂蚁金服开放平台,创建一个移动应用 创建应用中所需要的参数apicloud中会有 2.添加功能,配置公钥(应用公钥) 应用创建成功后, ...

  4. Android 微信支付支付宝支付

    由于项目需求,加入这2个功能记录一些需要注意的地方 一.微信支付 微信支付在2016年4月份左右稍微调整了一下支付过程,但是文档却没怎么更新,这也是百度上为什么那么多开发者都说微信是个大坑. 身为一个 ...

  5. android移动支付——支付宝支付,android开发游戏加速器

    上面的支付流程细化下来就是: 1.浏览商品 2.把要买的商品加入购物车 3.把商品拿到收银台,收银人员处理商品信息 4.告诉收银员支付方式 5.选择支付方式进行支付 6.处理支付结果(成功.失败.取消 ...

  6. android移动支付——支付宝支付

    前言 这里开篇讲解一系列的android相关的移动支付.移动支付也称为手机支付,用户使用移动的设备,完成对所购买商品或者服务的支付功能.包括远程支付(网上支付.短信支付),近场支付(刷卡.滴卡.pos ...

  7. 微信支付-----统一下单接口对接

    本以为没有机会接触鼎鼎大名的支付宝和微信接口(公司本身是做第三方支付的),最近由于一个售货机项目需要对接银联,支付宝和微信接口,因为我自身已经对接了银联,之后根据安排,由我对接微信的相关接口.话不多说 ...

  8. JAVA支付——支付宝支付对接

    前言 [蚂蚁金服对接平台](https://open.alipay.com/platform/manageHome.htm) 首先登陆蚂蚁金服官方对接平台,这里用沙箱测试 按照官方提示,设置以下配置. ...

  9. 免签接口 个人二维码收款系统/微信支付支付宝支付二维码监听自动发货/个人免签系统/个人免签支付 微信.支付宝 个人支付监控

    开源个人收款码免签系统 服务端和监控端全部开源,自建支付平台,安全更放心,二开更方便 没有中间商赚差价,买家扫多少,商家收多少 一.系统特色 1.1 支持 支付宝个人收款的推送通知 支付宝商家二维码的 ...

  10. 手机网页端支付宝支付

    手机网页端支付开发文档:https://docs.open.alipay.com/203/105285/ 第一步:进入蚂蚁金服(https://openhome.alipay.com),创建应用,提交 ...

最新文章

  1. DymSLAM: 基于几何和运动分割的4D动态场景重建( RAL)
  2. 手机数据抓包以及wireshark技巧
  3. python统计字符串中数字个数 socket_Python中socket中的listen()里参数(数字)到底代表什么?...
  4. 美团点评技术年货:900+页电子书,覆盖前端、后台、大数据、算法……
  5. 【2019.09.08】2019icpc南昌网络赛
  6. vuejs知乎_你也许不知道的Vuejs - 深入浅出响应式系统
  7. python爬虫的用途_python爬虫用代理ip有什么用途?
  8. jQuery的DOM操作之捕获和设置
  9. 华为最新解bl解锁码计算工具_黔隆科技刷机教程红米note4X低配版忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  10. 黑客攻防技术宝典:浏览器实战篇 -- 上篇(笔记)
  11. 尝试在UBUNTU环境下测试优盘读写速度
  12. LibreELEC(kodi)安装
  13. 获取中国票房网的五年间年度票房的数据信息(初学者完整代码)
  14. oracle包与实体包,实体oracle数据库学习
  15. 单片机 | keil4串口CH430驱动安装失败
  16. 最快Android模拟器Genymotion的安装与使用完整教程(多图,慎点)
  17. 私链多节点的创建部署
  18. 2015ccpc——G - Ancient Go
  19. Java之字符类型char
  20. Python爬虫之定时抢购淘宝商品

热门文章

  1. python3GUI--磁力搜索工具(附tk源码)
  2. 为什么html中图片显示不出来,网页图片不显示怎么回事?网页图片不显示的解决方法...
  3. 理解分布函数(概率论)
  4. 【图像修复】论文阅读笔记 ----- 《Image inpainting based on deep learning: A review》
  5. 无损对图片进行压缩软件Caesium使用方法及下载
  6. JAVA----流的浅谈之一低级流
  7. 开源H5盲盒商城源码系统4.0-vue+TP5php框架开发开源网站
  8. 代码不规范,亲人两行泪
  9. HaaS EDU场景式应用学习 - 复古八音盒
  10. 吉他入门教程之吉他音阶训练——认识音阶