支付宝api教程,支付宝根据交易号自动充值
最近公司要用php做一个网站支付宝自动充值的功能,具体就是客户把钱直接转到公司的支付宝账号里,然后在我们网站上填写上交易号,我们网站程序自动获取交易信息,自动给网站的账户充值。
我的具体想法就是利用支付宝的api根据交易号查找跟公司账号交易的信息,获取信息以后把金额、交易人、交易时间等信息存入网站数据库。
然后这两天就研究了一下支付宝的api,以前没用过支付宝的api,走了一些弯路,把经验记下,给后来者参考。
一、找接口
在找接口的过程中我发现阿里巴巴有两套接口。一套是支付宝api,简称Aop,只有企业实名认证的账户才可以申请。另一套是淘宝开放平台的api,简称Top,个人可以申请,有的接口也需要企业认证。这两套接口应该使用哪一个想必很好分辨了,跟支付宝有关就申请支付宝的Aop,跟淘宝相关的就申请Top。
我需要的是支付宝接口,就在支付宝文档里找想要的接口。alipay.user.trade.search

二、使用接口
怎么使用接口呢?在这两个平台上都是要创建应用,通过应用的id和一些token来获取权限,再进行相应的操作。这里我只用过支付宝的api,所以只说一下Aop的了。
打开控制面板创建应用。

创建完成以后,会分配一个App ID给你。当你修改应用的时候还提示你需要填写一个回调地址,回调地址是什么呢?暂且一等,一步一步的来。
当应用创建完了以后是需要根据App ID来进行用户授权的,要不然你没有权限获取用户账号的交易信息。
授权的地址是:


现在你就可以通过这个code来进行操作获取用户的authtoken。
authtoken是什么?authtoken是你在调用支付宝函数的时候需要传入的参数。
找到函数以后可以用测试工具获取测试代码示例:
https://sandbox.alipaydev.com/home/apiTestTools.htm?method=alipay.user.trade.search

代码说明:
$c = new AopClient;//AopClient是Aop的sdk里给出的工具类,首先实例化一个工具类对象
$c->appId = appId;//给对象appid赋值
$c->privateKey = rsaPrivateKeyFilePath;//给privatekey赋值,这里有个bug,就是AopClient里面根本没定义 privateKey这个属性,我擦。。坑爹的api,实际上是名为 rsaPrivateKeyFilePath的属性。。。这个属性是什么意思呢?这个就是openssl加密方式的私钥路径,私钥是需要放到你服务器上的。openssl在你配置应用的时候就让你配置了公钥,这里需要把私钥路径放到这里,openssl不知道啥意思看这个地址:https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/viewKbDoc.htm?key=236615_428849&type=info
$c->format = format;//这个format是格式,具体是分为"xml"和"json"
//总的来说上面这个AopClient就是相当于权限认证,系统根据appid和密钥文件验证你的权限
$req = new AlipayUserTradeSearchRequest();//这个地方是实例化了一个api具体请求方法类
$req->setEndTime("2015-2-7 00:07:37");//设置结束时间,具体就不说了
$req->setAlipayOrderNo("111");//交易号
$req->setStartTime("2015-2-7 00:07:35");//开始时间 $resp = $c->execute($req, authToken);//执行,这里要说一下,这个authtoken从哪里取啊。。这个就是比较坑爹的地方了,我找了半天才知道
//这个地方就是要调用一下alipay.system.oauth.token这个api来获取token,具体代码我放到下一个片段里
$c = new AopClient();
$c->appId = "102014123000022415";//应用id
$c->rsaPrivateKeyFilePath = APPLICATION_PATH . '/../public/res/rsa_private_keyShaxiang.pem';//设置密钥的路径
$c->format = "json";//指定格式 $req = new AlipaySystemOauthTokenRequest();//获取token的request
$req->setGrantType("authorization_code");//设置要操作的类型
$req->setCode("");//回调地址给你传回的code参数,code原来是用来生成authtoken的。。。好吧。。
$resp = $c->execute($req);//执行,很重要的一点,这个地方官方给的地代码实例传了一个AuthToken,其实这个方法不需要传AuthToken的,本来就是获取AuthToken的方法。。。这个函数是重载方法
echo "<pre>";
var_dump($resp);//打印一下,就看到 access_token这个属性了,就是它了,它就是AuthToken。。。
echo "</pre>";
听别的教程里说这个AuthToken有效期是一年。。不知道真假,待验证。有效期过了需要根据update_token来更新AuthToken,这个地方是获取token调用AlipaySystemOauthToken和更新AuthToken的详细介绍:
到这里就可以基本上搞定了这个获取信息的api了。。。
然后就可以利用各种request类来操作了,如下
$c = new AopClient();
$c->appId = "1020141230000224";//id
$c->rsaPrivateKeyFilePath = APPLICATION_PATH . '/../public/res/rsa_private_keyShaxiang.pem';
$c->format = "json";
$req = new AlipayUserTradeSearchRequest();//此处实例化各种请求就可以各种操作了
$req->setEndTime("2015-2-7 00:07:37");//设置结束时间,具体就不说了
$req->setAlipayOrderNo("111");//交易号
$req->setStartTime("2015-2-7 00:07:35");//开始时间 $resp = $c->execute($req, “201502BBa66dd2645f10418fb8ba1ef953a3dX”);//获取的AuthToken
返回的信息如下:

只是做一个指引。。。有不懂的问题可以咨询阿里旺旺“alipay开放平台”会有专门的技术人员给解答问题,不过自己能解决的尽量还是自己搞定吧。。
还有补充一下:他们有个沙箱测试这么一说,PHP下沙箱好像有些问题,强烈建议直接申请上线,然后修改api,上面的沙箱测试我也忘了为何成功了,之后用的时候都失败了,浪费了很多时间。总是获取私钥解析失败,有人说是因为给的私钥是经过pkcs8编码过的。有不懂的就多看几遍api,表示他们的api文档写的很烂唉。。。伤不起。。没有细节说明
2015-3-14补充:
最近有朋友说沙箱测试PHP获取不到auth_token,提示缺少sign参数。我又测试了一下,原因是在对回调地址的code处理时出了问题。私钥不能生成sign参数。Aopclient里面openssl_get_privatekey()这个方法返回false,换了openssl_pkey_get_private()还是不行。我当时可能是直接申请上线的。
估计是支付宝沙箱给出的私钥是经过PKCS8编码过的。参考一下:http://blog.csdn.net/zhouzme/article/details/38380621
建议大家直接应用上线吧,把Apache升级到2.29,openssl升级到1.02就可以通过安全监测了。
申请周期大概在四五个工作日。
支付宝api教程,支付宝根据交易号自动充值的更多相关文章
- ECSHOP 支付宝发货确认接口,记录支付宝返回的交易号
1,在order_info 数据表尾添加trade_no 字段 数据表尾怎么添加trade_no 字段 ECSHOP为了支付宝发货确认接口,需要记录支付宝返回的交易号 1,在order_info 数据 ...
- yii2 支付宝支付教程 [ 2.0 版本 ]
yii2 支付宝支付教程 [ 2.0 版本 ] 支付宝支付流程个人理解大致就这三步1.前台页面将支付信息数据通过立即支付按钮 ajax提交到订单处理层2.在订单处理层引用支付宝的接口 将支付数据写入 ...
- 支付宝api指南
tyle="margin:20px 0px 0px; line-height:26px; font-family:Arial"> 在这些服务中,服务类型大致可以分为以下几类: ...
- Python撸支付宝红包教程,行走在灰色产业边缘的程序员!
2018年刚到就作死撸羊毛(支付宝).2017年用分享给支付宝好友链接的官方通道"撸"了400大洋. 如许天天早上7:30便起床开愉快心的分享红包链接.200多个老友分享完一次 ...
- 支付宝-API接口解析-转账到银行
支付宝-API接口解析-转账到银行 扫码转账 测试地址 解析内容: alipays://platformapi/startapp?appId=09999988&actionType=toCar ...
- 支付宝API
1. 业务场景描述:在我们的爱旅行项目中,用户只有报名并且付款之后才能算作参加旅行团成功,因此必须提供快速便捷的支付功能:这里,我们选择了阿里的支付宝api来实现快捷支付,基于此,我们向蚂蚁金服发起申 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...
- C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后 ...
- 【分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后 ...
随机推荐
- C# Redis Server分布式缓存编程(二)
在Redis编程中, 实体和集合类型则更加有趣和实用 namespace Zeus.Cache.Redis.Demo { public class Person { public int Id { g ...
- Apache中 RewriteRule 规则参数介绍
Apache中 RewriteRule 规则参数介绍 摘要: Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量 ...
- vb.net写的odbc连接dsn数据源和ole链接oracle的小例子
最近由于工作需要开始接触vb2010,也叫vb.net.相比vb6.0有面向对象编程的优势.同时接触一门新语言,要更快的实际应用起来,链接数据库是必不可少的.之前用vba写过一个售书工具,正好可以拿来 ...
- iOS的崩溃和编译错误
1. Command /bin/sh failed with exit code 127 这是因为mogenerator找不到路径,stackoverflow给出的答案是: If /usr/local ...
- How to center a div in bootstrap3
There are two approaches to centering a column <div> in Bootstrap 3: Approach 1 (offsets): The ...
- [引]ASP.NET MVC 4 Content Map
本文转自:http://msdn.microsoft.com/en-us/library/gg416514(v=vs.108).aspx The Model-View-Controller (MVC) ...
- 关于Eclipse插件开发(四)-------给视图加下拉菜单和按钮和加入编辑器.
本例将给视图加入下拉菜单和按钮,同时再为列表添加一个右键菜单. 创建ActionGroup类 加入菜单和按钮的方法与SWT和JFace组件的一样,先创建一个ActionGroup代码如下: MyAct ...
- 关于Git的工作区域和对应的文件状态.
Git是一个免费的.分布式的版本控制工具,或是一个强调了速度快的源代码管理工具.每一个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力,不依赖于网络和中心服务器. Git ...
- 【转】必需知道的 SharePoint 权限 Tips
SharePoint Tips about Permissions: What you need to know I have been writing tips about Shar ...
- C#学习笔记14:面向对象继承的特点和里氏转换
面向对象: 继承:减少代码. 单根性 传递性 子类没有从父类那里继承了构造函数,只是会默认的调用父类那个无参数的构造函数 Class person { Public String Name { Ge ...