准备工作

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扫码支付接入流程及代码示例相关推荐

  1. 微信pc Native支付 支付宝pc扫码支付 Demo PHP tp5

    官方sdk Demo 支付宝 请求支付代码 public function alipay(){$arr =input('param.');vendor('alipay-trade-page-pay/a ...

  2. 支付宝pc扫码支付简单实现

    1.创建AlipayConfig类,配置支付宝参数及个人参数 /* * *类名:AlipayConfig *功能:基础配置类 *详细:设置帐户有关信息及返回路径 *修改日期:2017-04-05 *说 ...

  3. laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)

    laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案) 参考文章: (1)laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案) (2)http ...

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

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

  5. 微信支付宝服务器分布,支付宝微信扫码支付中间件「第二届立创商城电子制作节30强作品」...

    原标题:支付宝微信扫码支付中间件「第二届立创商城电子制作节30强作品」 本作品为第二届立创商城电子制作节30强入围作品,作者立创社区ID:云逸Baby:转载请注明出处,未经允许不得用作商业用途.作品原 ...

  6. 微信和支付宝H5扫码支付开发记录

    微信和支付宝H5扫码支付开发记录 微信支付 支付宝支付 简单前端实现的一下方法,服务端方法未记录: 微信支付 微信流程步骤简介 1.获取用户code 2.拉起微信支付 支付宝支付 支付宝流程步骤简介: ...

  7. 基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付

    ​ 基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付 今天接口申请下来,下载了官方demo对着调试了一天,终于实现想要的功能,先看图 选择支付宝支付 跳出二维码弹窗 手机支付宝进 ...

  8. 关于微信PC扫码支付

    关于微信PC扫码支付 扫码支付 有两种模式 官网有说  这里采用简单明白的模式2 前期准备  1 需要公众号 开通了微信支付权限 2 需要微信支付商户平台账号 服务器生成订单号 发送请求 https: ...

  9. JAVA支付宝扫码支付开发流程

    近期工作遇到支付宝扫码支付,经开发研究与3年前相比  API调用与配置更加简单方便,整体开发流程如下(后期会有对应的支付宝APP支付) 登录支付宝开发平台 -->开发接入    链接:https ...

最新文章

  1. 关于pytorch--embedding的问题
  2. 辛星和您一起手写CSS气泡
  3. MySQL(十一)之触发器
  4. Flash必要的系统组件未能正常运行
  5. Linux 用户的 3 个命令行小技巧
  6. 廖雪峰Python教程学习笔记
  7. java加入md5_javamd5加密解密
  8. Norton AntiVirus 8.0 企业版服务器客户端安装说明
  9. 干支纪年法简便算法_基于回弹法的混凝土实体质量过程控制研究
  10. php 导出图片到excel,从PHP导出图片excel的方法
  11. 抽象代数笔记2——群
  12. linux tar高级用法,Linux中tar命令高级用法——备份…
  13. 医疗大数据与智能医疗临床诊断(大数据人工智能公司)
  14. 【Chrome扩展程序】利用 background 实现跨域 fetch 访问
  15. 8255实现数码显示管显示两位数字
  16. 阿里云服务器搭建视频
  17. ip解析经纬度,基站定位经纬度,用就完事了
  18. shareSDK如何只分享图片
  19. html插件 开发工具,前端开发必备工具之辅助开发工具篇
  20. matlab入门(三)——矩阵的构造与四则运算、基本程序结构

热门文章

  1. linux进程管道通信缺点,Linux 进程间通信(1) -- 管道
  2. 新年警惕:多数手机银行App存安全隐患
  3. android 百度唤醒,Android百度语音唤醒(has no license,错误码11002)
  4. win10+centos7 双系统安装
  5. Dell灵越燃7000网络驱动被误删后无法安装解决方案
  6. 【Ice】【01】linux 安装ice
  7. DoraCloud for Proxmox桌面云上启用NVIDIA Tesla P4的vGPU功能
  8. 批量添加用户脚本--Linux bash
  9. 服务器系统控制台怎么打开,云服务器控制台怎么打开
  10. 微信支付密码设置html,微信支付页面怎么加密码锁屏(微信支付界面怎么上锁)...