PHP可以实现打开手机jsp页面支付宝支付实现软件?

当前位置: |
独家开发新版php第三方api第四方支付平台程序源码下载完整带手机支付
时间: 17:03 来源:开源之家 作者:开源之家测试提供 下载:69 次
源码说明:本站源码全部测试通过,配有前台及后台演示图,修复部分BUG,去除后门漏洞,绿色安全,希望能对大家有所帮助!
源码类型:理财源码
源码大小:32.3 MB
运行环境:PHP | MYSQL
下载次数:69 次
推荐主机:
提取密码/源码编号:
独家开发新版php第三方api第四方支付平台程序完整带手机支付一、程序为源码版,无任何加密,不是市面上卖的那些程序版,完全可以二开,二、带费率单独设置,可根据会员给予费率调配三、带扣量功能,如果想接一些灰色的站赚多一点可以启用这个功能,比如十笔扣一比,四、订单管理,商户一建提现我只能告诉你们的是这个程序不管是自己用还是放出去让别人对接,都是很不错的。
最新交易系统商业完整源码|ThinkPHP内
开源之家广告栏目A
<img src="http://oss.os86.cn/uploads/allimg/-1F-L.jpg" width="50" height="50" alt="最新交易系统商业完整源码|Think">最新交易系统商业完整源码|Think理财源码4477
开源之家广告栏目B
开源之家广告栏目C
Copyright &
ENBOO.CN 版权所有 | |
客服 Q Q:
站内所有资源,只为爱好代码者提供技术交流、二次开发所用,会员无限制下载全站所有资源。
资源全部测试通过,配有前台及后台演示图,修复部分BUG,去除后门漏洞,请放心使用。为了账号安全,请及时绑定邮箱和手机
php开发中app怎么接入支付宝
APP支付接口:alipay.trade.app.pay
服务器端使用框架:TP5
登录蚂蚁金服开放平台&--&&创建应用&--&&添加App支付功能。具体查看官方文档
下载官方&SDK&(PHP版本资源)——当前SDK版本:106&生成时间:&11:46:10
将SDK原码放置在TP5的vendor目录下的alipay文件夹(可根据实际使用框架技术进行实际调整)。
支付接口调用原理
1、APP支付系统架构
APP支付系统架构图
2、数据校验原理
数据校验原理
应用公钥(商户自身的RSA公钥):支付宝使用该公钥验证该交易是商户发起。
支付宝公钥(支付宝的RSA公钥):商户使用该公钥验证该结果是支付宝返回的。
3、系统交互流程
系统交互流程图
4、支付场景具体实现流程(最详细图解)
在集成App支付能力时,建议实现如下支付流程,创建订单并支付,根据返回的结果确定支付状态,并进行相应的异常处理,其过程如下图所示.
支付场景具体实现流程
商家APP在创建订单并且唤起支付宝APP支付,流程如上图所示,根据第2.2,3步返回的支付结果,确定支付状态,并且做相应的异常处理(必要时关闭订单)
步骤1:商户APP端请求商户服务器接口,提交订单数据。
步骤2:商户服务器端接收数据,然后对数据进行签名,返回请求参数到商户APP端。
官方接口文档:
——代码如下:
//vendor();为TP5框架的方法,作用:导入第三方框架类库
vendor(&#39;alipay.aop.AopClient&#39;);
vendor(&#39;alipay.aop.request.AlipayTradeAppPayRequest&#39;);
//实例化支付接口
$aop&=&new&\AopClient();
$aop-&gatewayUrl&=&&&;&//支付宝网关
$aop-&appId&=&“应用ID,填写你的APPID”;
$aop-&rsaPrivateKey&=&&商户私钥,您的原始格式RSA私钥()&;
$aop-&alipayrsaPublicKey&=&&支付宝公钥&;
$aop-&apiVersion&=&&#39;1.0&#39;;
$aop-&signType&=&&签名方式,如&RSA2&&;
$aop-&postCharset&=&&#39;UTF-8&#39;;
$aop-&format&=&&json&;
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$appRequest&=&new&\AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$bizcontent&=&json_encode([
&#39;body&#39;&=&&&#39;余额充值&#39;,&//订单描述
&#39;subject&#39;&=&&&#39;充值&#39;,&//订单标题
&#39;timeout_express&#39;&=&&&#39;30m&#39;,
&#39;out_trade_no&#39;&=&&‘test01’,&//商户网站唯一订单号
&#39;total_amount&#39;&=&&&#39;0.01&#39;,&//订单总金额
&#39;product_code&#39;&=&&&#39;QUICK_MSECURITY_PAY&#39;,&//固定值
$appRequest-&setNotifyUrl($url);&//设置异步通知地址
$appRequest-&setBizContent($bizcontent);
//这里和普通的接口调用不同,使用的是sdkExecute
$response&=&$aop-&sdkExecute($appRequest);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
echo&htmlspecialchars($response);//就是orderString&可以直接给客户端请求,无需再做处理。
//&如果最后有问题可以尝试把htmlspecialchars方法去掉,直接返回$response
说明:sdkExecute()方法,作用生成签名,详细步骤如下:
将请求参数组装分下列3步,以最后第三步获取到的请求为准。
1)将请求参数的键按字典排序,然后按照key=value&key=value方式拼接,得到未签名原始字符串如下:
app_id=0779&biz_content={&timeout_express&:&30m&,&product_code&:&QUICK_MSECURITY_PAY&,&total_amount&:&0.01&,&subject&:&1&,&body&:&我是测试数据&,&out_trade_no&:&IQJZSRC1YMQB5HU&}&charset=utf-8&format=json&method=alipay.trade.app.pay?ify_url=×tamp=&20:26:31&version=1.0
2)再对原始字符串进行签名
app_id=0779&biz_content={&timeout_express&:&30m&,&product_code&:&QUICK_MSECURITY_PAY&,&total_amount&:&0.01&,&subject&:&1&,&body&:&我是测试数据&,&out_trade_no&:&IQJZSRC1YMQB5HU&}&charset=utf-8&format=json&method=alipay.trade.app.pay?ify_url=×tamp=&20:26:31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj+y48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp/M45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g=
3)最后对请求字符串的所有一级value(biz_content作为一个value)进行encode,编码格式按请求串中的charset为准,没传charset按UTF-8处理,获得最终的请求字符串:
app_id=0779&biz_content=%7B%22timeout_express%22%3A%C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22IQJZSRC1YMQB5HU%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay?ify_url=http%3A%2F%2Fdomain.merchant.com%2Fpayment_notify&sign_type=RSA2×tamp=%%3A31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj%2By48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp%2FM45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g%3D
步骤3:商户APP接收从商户服务器端返回的请求参数,然后调起支付宝支付面板。
若用户支付成功,支付宝会同步给商户APP端返回一个支付结果。相应地,支付宝也会通过异步通知给商户服务器端返回一个支付结果。
注意:由于同步通知和异步通知都可以作为支付完成的凭证,且异步通知支付宝一定会确保发送给商户服务端。为了简化集成流程,商户可以将同步结果仅仅作为一个支付结束的通知(忽略执行校验),实际支付是否成功,完全依赖服务端异步通知。
步骤4:服务端异步通知处理机制(支付宝主动发起通知,该方式才会被启用)
官方接口文档:
1)必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML标签、开发系统自带抛出的异常提示信息等;
2)支付宝是用POST方式发送通知信息,因此该页面中获取参数的方式,如:$_POST[‘out_trade_no’];
3)程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);
4)当商户收到服务器异步通知并打印出success时,服务器异步通知参数notify_id才会失效。
——代码如下:
$aop&=&new&AopC
$aop-&alipayrsaPublicKey&=&&#39;请填写支付宝公钥,一行字符串&#39;;
$flag&=&$aop-&rsaCheckV1($_POST,&NULL,&&RSA2&);&//验证签名
if($flag){
//校验通知数据的正确性
$out_trade_no&=&$_POST[‘out_trade_no&#39;];&//商户订单号
$trade_no&=&$_POST[‘trade_no&#39;];&//支付宝交易号
$trade_status&=&$_POST[‘trade_status&#39;];&//交易状态trade_status
$total_amount&=&$_POST[‘&#39;total_amount&#39;];&//订单的实际金额
$app_id&=&$_POST[‘app_id&#39;];
if($app_id!=$this-&config[&#39;app_id&#39;])&exit(&#39;fail&#39;);&//验证app_id是否为该商户本身
//只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。
if($trade_status&!=&&#39;TRADE_FINISHED&#39;&&&&$trade_status&!=&&#39;TRADE_SUCCESS&#39;)
exit(&#39;fail&#39;);
//校验订单的正确性
if(!empty($out_trade_no)){
//1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
//2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
//3、校验通知中的seller_id(或者seller_email)&是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)。
//上述1、2、3有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。
//校验成功后在response中返回success,校验失败返回failure
exit(&#39;fail&#39;);
echo&fail&;&//验证签名失败
步骤5:当商户APP端接收到支付宝的同步返回结果为成功时,商户APP端再请求商户服务器端API,判断订单最终支付结果,并做出最终响应。
你还没有登录,请先登录或注册慕课网帐号
36407人关注
Copyright (C) 2018 imooc.com All Rights Reserved | 京ICP备 号-11发布于 03/30 22:08
工作环境,支付宝账号是公司的,app应用和秘钥配置都是我自己申请的,这其中的流程暂且跳过。
一、准备工作
appid、应用私钥、应用公钥、支付宝公钥
二、配置文件
'alipay'=&[
'gatewayUrl'
=& 'https://openapi.alipay.com/gateway.do',
'rsaPrivateKey'
=& '应用私钥',
'rsaPublicKey'
=& '应用公钥',
'alipayrsaPublicKey'=& '支付宝公钥',
=& '支付宝邮箱',//可不要
=& 'json',
=& 'UTF-8',
'signType'
=& 'RSA2',
'transport'
=& 'http',
二、下载官方的SDK包,放在extend下,如图
三、创建支付方法
&&& & (一)创建支付类
namespace app\index\
use think\C
class Alipay
* 支付宝支付
* $total_amount
* $product_code
* $notify_url
异步回调地址
public function alipay($body, $total_amount, $product_code, $notify_url)
* 调用支付宝接口。
import('.Alipay.aop.AopClient', '', '.php');
import('.Alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');
$aop = new \AopClient();
$aop-&gatewayUrl
= Config::get('alipay')['gatewayUrl'];
$aop-&appId
= Config::get('alipay')['appId'];
$aop-&rsaPrivateKey
= Config::get('alipay')['rsaPrivateKey'];
$aop-&format
= Config::get('alipay')['format'];
$aop-&charset
= Config::get('alipay')['charset'];
$aop-&signType
= Config::get('alipay')['signType'];
$aop-&alipayrsaPublicKey
= Config::get('alipay')['alipayrsaPublicKey'];
$request = new \AlipayTradeAppPayRequest();
$arr['body']
$arr['subject']
$arr['out_trade_no']
= $product_
$arr['timeout_express']
$arr['total_amount']
= floatval($total_amount);
$arr['product_code']
= 'QUICK_MSECURITY_PAY';
$json = json_encode($arr);
$request-&setNotifyUrl($notify_url);
$request-&setBizContent($json);
$response = $aop-&sdkExecute($request);
&&&&(二)创建支付方法
namespace app\index\
use think\C
use think\R
class Payment extends Common
//测试服务器
$domain = 'http://xxxx.com';
public function __construct(Request $request = null)
parent::__construct($request);
public function payOrder()
//获取订单号
$where['id'] = input('post.orderid');
//查询订单信息
$order_info = db('order')-&where($where)-&find();
$reoderSn = $order_info['ordersn'];
//获取支付方式
$pay_type = input('post.paytype');//微信支付 或者支付宝支付
//获取支付金额
$money = 0.01;//$order_info['realprice'];
//判断支付方式
if ($pay_type == 'alipay') {
$type['paytype'] = 1;
db('order')-&where($where)-&update($type);
$alipay = new Alipay();
//异步回调地址
$url = $this-&url_translation_address('/index/payment/alipay_notify');
$array = $alipay -&alipay(Config::get('company'), $money, $reoderSn, $url);
if ($array) {
return $this-&response($array, 1, '成功');
return $this-&response('', 0, '对不起请检查相关参数');
if ($pay_type == 'wechat') {
$type['paytype'] = 2;
* 支付宝支付回调修改订单状态
public function alipay_notify()
//原始订单号
$out_trade_no = input('out_trade_no');
//支付宝交易号
$trade_no = input('trade_no');
//交易状态
$trade_status = input('trade_status');
if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
$condition['ordersn'] = $out_trade_
$data['status'] = 2;
$data['third_ordersn'] = $trade_
$result=db('order')-&where($condition)-&update($data);//修改订单状态,支付宝单号到数据库
if($result){
echo 'success';
echo 'fail';
echo "fail";
//相对地址转绝对地址
protected function url_translation_address($url)
return $this-&domain . $
四、接下来,安卓或者iOS 对接成功后,就可以进行测试了。如果出现回调地址没有响应或者出现其他问题,可在开放& 平台联调日志排查& 中查看支付宝的报头响应信息
地址& https://openmonitor.alipay.com/acceptance/cloudparse.htm
& 著作权归作者所有
人打赏支持
码字总数 18583
IJPay 支付宝支付已支持多应用 JPay是对微信App支付、支付宝App支付的二次封装,对外提供一个相对简单的接口以及支付结果的回调 IJPay是JPay服务端-实现微信、支付宝系列支付 微信服务商模式下...
其实题目有点大,主要讨论的是手机客户端怎么接入支付宝的快捷支付呢。 支付宝的快捷支付的相关文档可以看这个帖子:支付宝接口资料下载(更新) 三方主要是客户端,业务服务端,支...
王二狗子11
spring-boot-pay 支付服务:支付宝,微信,银联详细 代码案例 (除银联支付可以测试以外,支付宝和微信支付测试均需要企业认证,个人无法完成测试),项目启动前请仔细阅读 注意事项 。 API接口...
一、主流移动支付方式 微信支付、支付宝支付、银联支付、Apple Pay、P++ 二、移动支付流程 1.微信支付流程 用户在商户客户端选好商品,点击付款 -& 商户服务端会收到消息,然后向微信服务端获...
Geeks_Chen
手机APP支付总结: 一. 支付宝手机APP支付: 支付宝手机APP文档: https://doc.open.alipay.com/docs/doc.htm?treeId=204&articleId=105051&docType=1 首先先了解支付宝官方提供的官方文档, 说明...
噼里啪啦啦
工程做完了 来个总结 1.提交订单1.1 提交参数(主要参数)用户id、商家id、服务id、服务单价、数量、总价1.2 验证提交过来的信息是否正确验证参数:单价与总价1.3 向订单表插入数据状态:未付款...
JPay 对微信App支付、支付宝App支付的二次封装,对外提供一个相对简单的接口以及支付结果的回调 使用方法 1、引入 2. Android Manifest配置 2.1权限声明 2.2注册activityapplication节点添加如...
前言 在这之前,笔者发布了两篇移动app支付相关博文,得到一些关注,但是由于博文中代码零碎,有些读者私信博主,以及加笔者qq咨询相关问题。考虑到这些,笔者把之前项目中的支付相关代码从业...
首先奉上调起支付页面截图 301.jpg 一:介绍 项目中要用到支付功能,需要支付宝支付、微信支付、银联支付,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。 今天我...
PaySDK 是 PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。可以轻松嵌入支持 PHP &= 5.4 的任何系统中,2.0 版现已支持 Swoole 协程环境。 我们有完善的在线技术...
没有更多内容
加载失败,请刷新页面
实现对'NB', 'KNN', 'LR', 'RF', 'DT', 'SVM','SVMCV', 'GBDT'模型的简单调用。# coding=gbk import time
from sklearn import metrics
import pickle as pickle
import ......
Spring MVC框架介绍 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。   Spring MVC框架提供了构建web应用程序的全功能MVC模块,使用了Spring可插入架构,可以选...
Java大蜗牛
架构介绍:Linux:操作系统Apache(httpd):提供web服务的软件MySQL:存储数据的,不能存图片和文件什么的,PHP:脚本语言,和shell类似但更复杂,做网址为主httpd、MySQL和PHP可以...
Question 299. Bulls and Cows Solution 题目大意:有一串隐藏的号码,另一个人会猜一串号码(数目相同),如果号码数字与位置都对了,给一个bull,数字对但位置不对给一个cow,注:数字对与位置对优先...
最近折腾了一下自己的 Orange Pi PC,意图使之重新焕发青春活力。 很快,我发现了 Armbian 这一为 ARM 开发板定制的 Debian GNU/Linux 操作系统。官网上有 Orange Pi PC 的主页,并为其提供了...
如何学习大数据技术?大数据怎么入门?怎么做大数据分析?数据科学需要学习那些技术?大数据的应用前景等等问题。由于大数据技术涉及内 容太庞杂,大数据应用领域广泛,而且各领域和方向采用...
准备工作 准备两台机器,每台机器都安装msyql,并启动mysql服务; 安装步骤可参考:mysql安装 如果mysql启动失败,可以去查看错误日志,会发现 /data/mysql 目录下的文件的属主属组不是mysql...
Zhouliang6
1. 概述 数据验证是企业应用开发中必备可少的环节,通常如果使用if-else在业务代码中写死验证逻辑,会导致验证逻辑与业务逻辑耦合。 2. 不合理的验证方式 public class BadDemo {
代码覆盖率 = 被测代码行数 / 参测代码总行数 * 100%。 行覆盖 它又被称作语句覆盖或基本块覆盖。这是一种较为常用且具有代表性的指标,度量的是被测代码中每个可执行语句是否被执行到。 条件...
六楼的宣言
没有更多内容
加载失败,请刷新页面
文章删除后无法恢复,确定取消删除此文章吗?
亲,自荐的博客将通过私信方式通知管理员,优秀的博客文章审核通过后将在博客推荐列表中显示
确定推荐此文章吗?
确定推荐此博主吗?
聚合全网技术文章,根据你的阅读喜好进行个性推荐
指定官方社区
深圳市奥思网络科技有限公司版权所有1、&支付宝开放平台并创建应用,审核通过后并签约app支付拿到pid
2、按照官方文档用&【RSA签名验签工具.bat】生成应用公钥和私钥
3、下载支付宝官方demo(https://docs.open.alipay.com/54/106370/根据自己的开发语言下载)包整合到项目中(说实话这个php的demo着实有些坑)
整合好开始写支付宝支付类代码如下:
namespace data\
use data\extend\alipay_app\aop\AopC
use data\extend\alipay_app\aop\request\AlipayTradeAppPayRequest as AlipayTradeAppPayR
* 功能说明:自定义支付宝支付接入类
class AliPayApp {
protected $
public function __construct()
$this-&aop
new AopClient();
$this-&aop-&gatewayUrl
= "https://openapi.alipay.com/gateway.do";
$this-&aop-&appId
= "步骤一中拿到的应用appid";
$this-&aop-&rsaPrivateKey
= "*******";//私有密钥(步骤二中生成的商户私有秘钥)
$this-&aop-&format
$this-&aop-&charset
= "utf-8";
$this-&aop-&signType
$this-&aop-&alipayrsaPublicKey
= "****";//商户公钥(步骤二中生成的商户公钥)
$this-&aop-&alipayPublicKey
= "*****";//支付宝公钥
* 创建APP支付订单
* @param string $body 对一笔交易的具体描述信息。
* @param string $subject 商品的标题/交易标题/订单标题/订单关键字等。
* @param string $order_sn 商户网站唯一订单号
* @return array 返回订单信息
public function createAppPay($order_sn,$body, $subject, $total_amount)
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$bizcontent
'out_trade_no'
$order_sn,
'timeout_express'
'1d',//失效时间为 1天
'total_amount'
$total_amount,//价格
'product_code'
'QUICK_MSECURITY_PAY',
//商户外网可以访问的异步地址 (异步回掉地址,根据自己需求写)
$request-&setNotifyUrl("http://".$_SERVER['HTTP_HOST']."/此处为回调通知地址");
$request-&setBizContent(json_encode($bizcontent));
//这里和普通的接口调用不同,使用的是sdkExecute
$response = $this-&aop-&sdkExecute($request);
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
* 异步通知验签
* @param string $params 参数
* @param string $signType 签名类型:默认RSA
* @return bool 是否通过
public function rsaCheck($params, $signType)
return $this-&aop-&rsaCheckV1($params, NULL, $signType);
 上面代码注意在调用&data\extend\alipay_app\aop\AopClient 这个类需要注意回调验签的过程调用&$this-&aop-&rsaCheckV1()这个类进行通知的sign和post回来的参数(此处需要主要验签过程按照官方要求去掉sign和sign_type后)重新组装+支付宝公钥($this-&aop-&alipayPublicKey切记不是应用公钥)代码稍作调整如下
/** rsaCheckV1 & rsaCheckV2
在使用本方法前,必须初始化AopClient且传入公钥参数。
公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。
public function rsaCheckV1($params, $rsaPublicKeyFilePath,$signType='RSA') {
$sign = $params['sign'];
$params['sign_type'] =
$params['sign'] =
return $this-&verify($this-&getSignContent($params), $sign, $rsaPublicKeyFilePath,$signType);
    function verify($data, $sign, $rsaPublicKeyFilePath, $signType = 'RSA') {
if($this-&checkEmpty($this-&alipayPublicKey)){
$pubKey= $this-&alipayrsaPublicK
$res = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($pubKey, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
    //logWrite("商户RSA公钥".$res);
  //读取公钥文件(注释部分为原来)
           //$pubKey = file_get_contents($rsaPublicKeyFilePath);
           //转换为openssl格式密钥
           //$res = openssl_get_publickey($pubKey);           //此处更改为支付宝公钥验签
    $pubKey= $this-&alipayPublicK
    $res = "-----BEGIN PUBLIC KEY-----\n" .
  wordwrap($pubKey, 64, "\n", true) .
  "\n-----END PUBLIC KEY-----";
    // logWrite("支付宝RSA公钥".$res);
($res) or die('支付宝RSA公钥错误。请检查公钥文件格式是否正确');
//调用openssl内置方法验签,返回bool值
     //logWrite("签名:".$sign);
if ("RSA2" == $signType) {
$result = (bool)openssl_verify($data, base64_decode($sign), $res, OPENSSL_ALGO_SHA256);
$result = (bool)openssl_verify($data, base64_decode($sign), $res);
if(!$this-&checkEmpty($this-&alipayPublicKey) && is_file($this-&alipayPublicKey)) {
//释放资源
openssl_free_key($res);
    //logWrite("验签结果:".var_export($result,true));
至此基本大功告成,最后一步是APP端的调用代码如下:
public function aliPayApp()
$out_trade_no = $this-&GetReqArgc('out_trade_no');
if (empty($out_trade_no)) {
$this-&error("没有获取到支付信息");
$data = $this-&getPayInfo($out_trade_no);
if($data & 0)
$ali_pay = new AliPayApp();
$retval = $ali_pay-&createAppPay($out_trade_no, $data['pay_body'], $data['pay_detail'], $data['pay_money']);
$this-&ExitMessage(SUCCESS,"",array("out_trade_no"=&$out_trade_no,"retData"=&$res));
$this-&ExitMessage(ERROR_CODE,"支付宝参数错误",0);
 以上接口返回给APP端后唤起快捷SDK创建订单并支付的参数后即可调起支付宝APP进行支付操作,最后就是通知处理支付结果的业务逻辑如下代码:
public function payCallback(){
= input('post.');
$pay = new AliPayApp();
$verify = $pay-&rsaCheck($params,$signType);
if ($verify_result) { // 验证成功
$out_trade_no = $request['out_trade_no'];
// 支付宝交易号
$trade_no = $request['trade_no'];
// 交易状态
$trade_status = $request['trade_status'];
//logWrite("支付成功了");
if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
//此处支付成功后的业务逻辑处理根据自己需求
echo "success"; // 请不要修改或删除
// 验证失败
echo "fail";
 ok大功告成!说实话支付宝支付还是比微信支付要好许多虽然也有坑,但微信支付的坑是比较多的! 
阅读(...) 评论()}

我要回帖

更多关于 如何实现支付宝第三方应用支付 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信