支付宝PC扫码支付接入流程及代码示例
准备工作
1:下载支付宝开放平台开发助手,使用助手工具生成应用公钥和应用私钥。
参考文档:
生成密钥 | 开放平台
2:给应用配置接口加签方式,此处的目的是将应用appid与应用公钥绑定。
参考文档:
生成并配置密钥 | 开放平台
3:查看应用是否开通了电脑网站支付
4:下载官方demo
SDK & Demo | 网页&移动应用
选择对应开发语音下载即可,此处以php为例
5:代码示例:
我们将php SDK代码放在项目sdk目录下,取名alipagepay,目录结构如下:
其中key文件夹是我们新增的,用于存放第2步操作绑定应用公钥后生成的支付宝公钥
前端html部分:
html 部分代码请自己完成,此处忽略
后端逻辑处理部分:
调起支付宝支付界面代码:
header('Content-type:text/html; Charset=utf-8');
//sdk路径根据自己实际项目需求更改
require_once '/sdk/alipagepay/pagepay/service/AlipayTradeService.php';
require_once '/sdk/alipagepay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
//站内生成订单记录,此处可根据自己实际项目需求更改
$data=array('touid' =>$uid,'uid' =>$uid,'money' => $money,'coin' =>$coin,'coin_give' =>$give,'trade_no' =>'','orderno' =>$orderid,'status' =>0,'addtime' =>time(),'type' =>1,'ambient' =>1,
);$res=Db::name("charge_user")->insert($data);if(!$res){$this->assign("jumpUrl",'/');$this->error("订单创建失败,请重新提交");
}$config=$this->getaliPagePayConfig();//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = trim($orderid);//订单名称,必填
$subject = trim($order_name);//付款金额,必填
$total_amount = trim($money);//商品描述,可空
$body = trim($order_name);//构造参数
$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']);//输出表单
var_dump($response);
return;
获取支付支付配置信息代码:
/**
* 获取支付宝支付配置信息
* @return array 配置信息
*/
public function getaliPagePayConfig(){$alipay_public_key_path='/sdk/alipagepay/key/publickey.php';require $alipay_public_key_path;$config = array ( //应用ID,您的APPID。'app_id' => '',//商户私钥'merchant_private_key' => '',//异步通知地址,替换为外网可访问的域名'notify_url' => "http://****.com/home/Payment/alipay_notify",//同步跳转,替换为外网可访问的域名'return_url' => "http://****.com/home/Payment/alipayres",//编码格式'charset' => "UTF-8",//签名方式'sign_type'=>"RSA2",//支付宝网关'gatewayUrl' => "https://openapi.alipay.com/gateway.do",//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。//此处的$publickey就是前面sdk中添加的key文件夹下的publickey.php中返回的支付宝公钥'alipay_public_key' =>$publicKey,//日志路径,根据自己项目需求更改'log_path' => '/log/think/home/payment/alipagepay_'.date("Y-m-d").'.txt',);return $config;}
支付宝同步回调代码:
//支付宝支付同步回调地址
function alipayres(){//sdk路径根据自己实际项目需求更改require_once '/sdk/alipagepay/pagepay/service/AlipayTradeService.php';$config=$this->getaliPagePayConfig();$arr=$_GET;$this->logali("同步回调信息");$this->logali(json_encode($arr));$alipaySevice = new \AlipayTradeService($config); $result = $alipaySevice->check($arr);$this->logali("同步回调信息验证结果:".json_encode($result));/* 实际验证过程建议商户添加以下校验。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($arr['out_trade_no']);//支付宝交易号$trade_no = htmlspecialchars($arr['trade_no']);//交易金额$total_amount =htmlspecialchars($arr['total_amount']);//应用appid$app_id=htmlspecialchars($arr['app_id']);//=============查询站内订单状态【根据自己实际项目需求更改】$orderinfo=Db::name("charge_user")->where(['orderno'=>$out_trade_no,'type'=>1,'ambient'=>1,'money'=>$total_amount])->find();$this->logali("同步回调订单内容:".json_encode($orderinfo));if(!$orderinfo){//订单不存在$status=-1;$orderinfo=array();}else{//订单已支付if($orderinfo['status']==0){$status=0;$orderinfo=array();}else{$status=1;}}//=============}else {//======【根据自己实际项目需求更改】========//验证失败$status=0;$orderinfo=array();//=============}//======【根据自己实际项目需求更改】========$this->assign('status',$status);$this->assign('orderinfo',$orderinfo);return $this->fetch();//=============
}
支付宝异步回调代码:
/*** 支付宝异步回调地址* @return string 支付状态 success:成功 fail:失败
*/
function alipay_notify(){/*************************页面功能说明************************** 如果没有收到该页面返回的 success 信息,支付宝会在24小时内按一定的时间策略重发通知*///sdk路径根据实际项目需求更改require_once '/sdk/alipagepay/pagepay/service/AlipayTradeService.php';$config=$this->getaliPagePayConfig();$arr=$_POST;$this->logali("异步回调信息:".json_encode($arr));$alipaySevice = new \AlipayTradeService($config);//$alipaySevice->writeLog(var_export($_POST,true));$result = $alipaySevice->check($arr);$this->logali("异步回调信息验证结果:".json_encode($result));/* 实际验证过程建议商户添加以下校验。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 = $arr['out_trade_no'];//支付宝交易号$trade_no = $arr['trade_no'];//交易状态$trade_status = $arr['trade_status'];//交易金额$total_amount=$arr['total_amount'];if($arr['trade_status'] == 'TRADE_FINISHED') {//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//请务必判断请求时的total_amount与通知时获取的total_fee为一致的//如果有做过处理,不执行商户的业务程序//注意://退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知}else if ($arr['trade_status'] == 'TRADE_SUCCESS') {//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//请务必判断请求时的total_amount与通知时获取的total_fee为一致的//如果有做过处理,不执行商户的业务程序 //注意://付款完成后,支付宝系统发送该交易状态通知$where['orderno']=$out_trade_no;$where['money']=$total_amount;$where['type']=1;$where['ambient']=1;$data=['trade_no'=>$trade_no];//$alipaySevice->writeLog(var_export($where,true));$this->logali("异步回调,订单查询条件:".json_encode($where));$res=Db::name->where($where)->update($data);if($res==0){$this->logali("异步回调,orderno:".$out_trade_no.' 订单信息不存在'); echo "fail";return;}$this->logali("异步回调,订单支付成功");echo "success"; //请不要修改或删除}//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——//echo "success"; //请不要修改或删除}else {//验证失败$this->logali("异步回调验证失败");echo "fail";}
}
/* 打印log */public function logali($msg){file_put_contents(CMF_ROOT.'log/think/home/payment/alipagepay_'.date("Y-m-d").'.txt',date('Y-m-d H:i:s').' '.$msg."\r\n",FILE_APPEND);}
支付宝PC扫码支付接入流程及代码示例相关推荐
- 微信pc Native支付 支付宝pc扫码支付 Demo PHP tp5
官方sdk Demo 支付宝 请求支付代码 public function alipay(){$arr =input('param.');vendor('alipay-trade-page-pay/a ...
- 支付宝pc扫码支付简单实现
1.创建AlipayConfig类,配置支付宝参数及个人参数 /* * *类名:AlipayConfig *功能:基础配置类 *详细:设置帐户有关信息及返回路径 *修改日期:2017-04-05 *说 ...
- laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)
laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案) 参考文章: (1)laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案) (2)http ...
- 支付宝开发 - 扫码支付
一.支付场景 用户使用支付宝钱包上的"扫一扫"功能,扫码商户针对每个订单实时生成的订单二维码,并在手机端确认支付. 二.调用流程 图2.1 支付宝扫码支付调用流程 a. 商户系统调 ...
- 微信支付宝服务器分布,支付宝微信扫码支付中间件「第二届立创商城电子制作节30强作品」...
原标题:支付宝微信扫码支付中间件「第二届立创商城电子制作节30强作品」 本作品为第二届立创商城电子制作节30强入围作品,作者立创社区ID:云逸Baby:转载请注明出处,未经允许不得用作商业用途.作品原 ...
- 微信和支付宝H5扫码支付开发记录
微信和支付宝H5扫码支付开发记录 微信支付 支付宝支付 简单前端实现的一下方法,服务端方法未记录: 微信支付 微信流程步骤简介 1.获取用户code 2.拉起微信支付 支付宝支付 支付宝流程步骤简介: ...
- 基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付
基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付 今天接口申请下来,下载了官方demo对着调试了一天,终于实现想要的功能,先看图 选择支付宝支付 跳出二维码弹窗 手机支付宝进 ...
- 关于微信PC扫码支付
关于微信PC扫码支付 扫码支付 有两种模式 官网有说 这里采用简单明白的模式2 前期准备 1 需要公众号 开通了微信支付权限 2 需要微信支付商户平台账号 服务器生成订单号 发送请求 https: ...
- JAVA支付宝扫码支付开发流程
近期工作遇到支付宝扫码支付,经开发研究与3年前相比 API调用与配置更加简单方便,整体开发流程如下(后期会有对应的支付宝APP支付) 登录支付宝开发平台 -->开发接入 链接:https ...
最新文章
- 关于pytorch--embedding的问题
- 辛星和您一起手写CSS气泡
- MySQL(十一)之触发器
- Flash必要的系统组件未能正常运行
- Linux 用户的 3 个命令行小技巧
- 廖雪峰Python教程学习笔记
- java加入md5_javamd5加密解密
- Norton AntiVirus 8.0 企业版服务器客户端安装说明
- 干支纪年法简便算法_基于回弹法的混凝土实体质量过程控制研究
- php 导出图片到excel,从PHP导出图片excel的方法
- 抽象代数笔记2——群
- linux tar高级用法,Linux中tar命令高级用法——备份…
- 医疗大数据与智能医疗临床诊断(大数据人工智能公司)
- 【Chrome扩展程序】利用 background 实现跨域 fetch 访问
- 8255实现数码显示管显示两位数字
- 阿里云服务器搭建视频
- ip解析经纬度,基站定位经纬度,用就完事了
- shareSDK如何只分享图片
- html插件 开发工具,前端开发必备工具之辅助开发工具篇
- matlab入门(三)——矩阵的构造与四则运算、基本程序结构
热门文章
- linux进程管道通信缺点,Linux 进程间通信(1) -- 管道
- 新年警惕:多数手机银行App存安全隐患
- android 百度唤醒,Android百度语音唤醒(has no license,错误码11002)
- win10+centos7 双系统安装
- Dell灵越燃7000网络驱动被误删后无法安装解决方案
- 【Ice】【01】linux 安装ice
- DoraCloud for Proxmox桌面云上启用NVIDIA Tesla P4的vGPU功能
- 批量添加用户脚本--Linux bash
- 服务器系统控制台怎么打开,云服务器控制台怎么打开
- 微信支付密码设置html,微信支付页面怎么加密码锁屏(微信支付界面怎么上锁)...