前几天做APP开发,用到了支付宝接口,简单写一下我做的APP接入支付宝支付的过程,希望对做APP支付宝支付的童鞋有帮助,

不懂的可以先去支付平台看一下支付宝支付的文档,我是下的demo看的,这个是用tp5.0做的,先上图:

至于支付接口的接口包文件自己下吧,这个我就不提供地址链接了,这个支付接口我用的是异步回调,好像现在版本的支付宝同步回调只能用来跳转页面用了,哎,不说了,看代码吧。

做这个支付宝支付我总共用到了三个控制器:

1:支付宝支付控制器。

2:支付宝支付配置参数控制器。

3:支付宝回调地址控制器。

好了,首先创建个支付宝支付的控制器,是由上个页面选择好支付方式之后确认支付后需要经过的控制器(这里选择的是支付宝支付),代码 如下:

 <?php
namespace app\mobile\controller;
use app\mobile\model\Goods;
use app\mobile\model\OrderGoods;
use think\Controller; class Pay extends Controller
{
public function pay_order()
{
$res = new OrderGoods();
//获取订单号
$where['id'] = input('post.order_sn');
$reoderSn = input('post.order_sn');
//查询订单信息
$order_info = $res->where($where)->find();
//获取支付方式
$pay_type = input('post.pay_type');//微信支付 或者支付宝支付
//获取支付金额
$money = input('post.totle_sum');
//判断支付方式
switch ($pay_type) {
case 'ali';//如果支付方式为支付宝支付 //更新支付方式为支付宝
$type['pay_type'] = 'ali';
$res->where($where)->update($type); //实例化alipay类
$ali = new Alipay(); //异步回调地址
$url = 'XXXXXXXXXXXXXXXXXX/Callback/aliPayBack'; $array = $ali->alipay('商品名称', $money,$reoderSn, $url); if ($array) {
return $array;
} else {
echo json_encode(array('status' => 0, 'msg' => '对不起请检查相关参数!@'));
}
break;
case 'wx'; break;
}
}
}

然后又创建了一个Alipay控制器,写支付宝配置参数,代码如下:

 class AliPay extends Controller
{ protected $appId = '';//支付宝AppId
protected $rsaPrivateKey = '';//支付宝私钥
protected $aliPayRsaPublicKey = '';//支付宝公钥
private $seller = ''; /*
* 支付宝支付
*/
public function aliPay($body, $total_amount, $product_code, $notify_url)
{
/**
* 调用支付宝接口。
*/
/*import('.Alipay.aop.AopClient', '', '.php');
import('.Alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');*/
Loader::import('Alipay\aop\AopClient', EXTEND_PATH);
Loader::import('Alipay\aop\request\AlipayTradeAppPayRequest', EXTEND_PATH); $aop = new \AopClient(); $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$aop->appId = $this->appId;
$aop->rsaPrivateKey = $this->rsaPrivateKey;
$aop->format = "json";
$aop->charset = "UTF-8";
$aop->signType = "RSA2";
$aop->alipayrsaPublicKey = $this->aliPayRsaPublicKey;
$request = new \AlipayTradeAppPayRequest();
$arr['body'] = $body;
$arr['subject'] = $body;
$arr['out_trade_no'] = $product_code;
$arr['timeout_express'] = '30m';
$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);
return $response; } function createLinkstring($para)
{
$arg = "";
while (list ($key, $val) = each($para)) {
$arg .= $key . "=" . $val . "&";
}
//去掉最后一个&字符
$arg = substr($arg, 0, count($arg) - 2); //如果存在转义字符,那么去掉转义
if (get_magic_quotes_gpc()) {
$arg = stripslashes($arg);
} return $arg;
} function argSort($para)
{
ksort($para);
reset($para);
return $para;
}
}

Alipay支付demo我放在extend目录下了,用这种方法来实现支付宝支付的话,上面的那个支付宝配置参数控制器的内容除了支付宝Appid,支付宝公钥,私钥,收款人账号,其他的照搬下来就行了,现在已经写了两个控制器了,接下来还有一个异步回调地址。这个异步回调有点坑了,支付成功有时候就是不回调,先上代码吧

 <?php
namespace app\mobile\controller;
use app\mobile\model\OrderGoods;
use app\mobile\model\IntegralRecord;
use app\admin\model\SystemSettings;
use app\mobile\model\Members;
use think\Controller;
use think\Request;
use think\Db; class Callback extends Controller
{
/*
* 支付宝支付回调修改订单状态
*/
public function aliPayBack()
{ if ($_POST['trade_status'] == 'TRADE_SUCCESS') {//如果支付成功
//===============修改订单状态===========================//
$order = new OrderGoods();//实例化
$orderSn = $_POST['out_trade_no'];//获取订单号
$where['order_sn'] = $orderSn;
$data1['type'] = 2;
$order->where($where)->update($data1);//修改订单状态
echo 'success';
exit;
}
}
}

OK现在代码写完了。执行支付宝支付订单的时候先进入支付宝Pay控制器接收POST传递的三个参数,订单号,金额,支付方式。接收到之后写商品名称,商品描述,回调地址等 然后实例化Alipay类调用这个类里面的aliPay方法进行支付,调用结果返回一个签名,把这个签名反馈给app端进行支付,支付成功后执行异步回调,修改订单状态,当然还有一些细节操作就不说了,我是已经弄好了,回调这个地方是个坑,大家做的时候一定要仔细认真,耐心才行。现在流程已经走完了,希望能对做这个功能的童鞋有所帮助。

本文属原创内容,为了尊重他人劳动,转载请注明本文地址:

http://www.cnblogs.com/luokakale/p/7612365.html

ThinkPHP5.0 实现 app支付宝支付功能的更多相关文章

  1. ThinkPHP5.0 实现 app微信支付功能

    相对于之前随笔写的<ThinkPHP5.0实现app支付宝支付功能>来说,php对接app微信支付功能就相对简单的多了,最近有加我的朋友问到app微信支付,所以我把app微信支付的demo ...

  2. laravel实现支付宝支付功能

    起因 前段时间因为项目中需要实现支付宝手机网站支付功能,所以写下这篇文章以作记录,不足之处,欢迎指教. 后端框架:Laravel 5.5 业务功能 适用于商家在移动端网页应用中集成支付宝支付功能.商家 ...

  3. APP支付宝支付接入

    1.app支付简介 买家可以在手机,掌上电脑等无线设备的应用程序内,通过支付宝(支付宝app或网页版支付宝)付款购买商品,且资金实行实时到账. 2.申请条件 1.申请前必须拥有经过实名认证的支付宝账户 ...

  4. django中使用事务以及接入支付宝支付功能

    之前一直想记录一下在项目中使用到的事务以及支付宝支付功能,自己一直犯懒没有完,趁今天有点兴致,在这记录一下. 商城项目必备的就是支付订单的功能,所以就会涉及到订单的保存以及支付接口的引入.先来看看订单 ...

  5. 支付宝支付功能(使用支付宝sdk)

    1.准备参数        新建一个公共参数配置类NewAlipayconfig (可将参数存放到config配置文件中读取)          public class NewAlipayconfi ...

  6. SSM 实现支付宝支付功能(图文详解+完整代码)

    阅读本文大概需要 4 分钟. 前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释, ...

  7. ThinkPHP接入支付宝支付功能

    最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能.这里我用的是即时到帐的接口,具体实现的步骤如下: 一.下载支付宝接口包 下载地址:https://b.alipay.com/o ...

  8. mui实现支付宝支付功能

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>H ...

  9. HTML5 开发APP( 支付宝支付)

    我们搞app有一个重要的功能那就是支付功能.无论是微信支付,支付宝,还是银联支付总要有一样支付手段来支持我们网上付款.实现完整的功能.我们公司app的支付方式经过大家开会讨论选择了支付宝支付(其实是当 ...

随机推荐

  1. iOS之 git 简单使用

    之前没有用过git管理代码, 现在 公司要求使用git,咱 就 记记 今天所学的东西.以后也好方便查阅 和补充. 首先 我描述一下我今天提交代码的情况. 同伴给了我一个 从git库下来的2个项目的包. ...

  2. 对抗栈帧地址随机化/ASLR的两种思路和一些技巧

    栈帧地址随机化是地址空间布局随机化(Address space layout randomization,ASLR)的一种,它实现了栈帧起始地址一定程度上的随机化,令攻击者难以猜测需要攻击位置的地址. ...

  3. django开发中利用 缓存文件 进行页面缓存

    首先我们先来了解下浏览器的缓存 浏览器缓存机制 Cache-control策略 Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是 ...

  4. 2016 湖南省省赛 Problem A: 2016

    Problem A: 2016 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 296  Solved: 171 Description  给出正整数 n ...

  5. python 进程池(multiprocessing.Pool)和线程池(threadpool.ThreadPool)的区别与实例

    一般我们是通过动态创建子进程(或子线程)来实现并发服务器的,但是会存在这样一些缺点: 1.动态创建进程(或线程)比较耗费时间,这将导致较慢的服务器响应.  2.动态创建的子进程通常只用来为一个客户服务 ...

  6. DataFrame使用总结1(超实用)

    DataFrame使用总结1(超实用): 1. 合并两个表 frame = [df1, df2] df = pd.concat(frame) res = pd.merge(df, df1, on=[' ...

  7. Kotlin实现LeetCode算法题之Two Sum

    LeetCode介绍 LeetCode是算法练习.交流等多功能网站,感兴趣的同学可以关注下(老司机请超车).页面顶部的Problems菜单对应算法题库,附带历史通过滤.难易程度等信息. 未来计划 打算 ...

  8. JavaWeb笔记一、Servlet 详解

    一.创建一个 Servlet 简单实现类 1.创建一个 HelloServlet 类(测试 Servlet 接口方法) 1 //创建一个 HelloServlet 类并实现 Servlet 接口 2 ...

  9. JDBC连接数据库的几种方法

    一. 最古老的方法(通过 Driver 接口直接连接数据库) 首先创建一个 Driver 实现类的对象 Driver dirver = new com.mysql.jdbc.Driver(); 准备连 ...

  10. VMware系统克隆

    第1章 搭建VMware实战环境 1.1 vmware主机配置-网络配置 1.1.1 虚拟主机添加网卡信息(5) a.右键虚拟主机→设置→添加虚拟网卡硬件设备 b.设置网络适配器类型→完成添加 1.1 ...