支付宝api教程,支付宝根据交易号自动充值

最近公司要用php做一个网站支付宝自动充值的功能,具体就是客户把钱直接转到公司的支付宝账号里,然后在我们网站上填写上交易号,我们网站程序自动获取交易信息,自动给网站的账户充值。

我的具体想法就是利用支付宝的api根据交易号查找跟公司账号交易的信息,获取信息以后把金额、交易人、交易时间等信息存入网站数据库。

然后这两天就研究了一下支付宝的api,以前没用过支付宝的api,走了一些弯路,把经验记下,给后来者参考。

一、找接口

在找接口的过程中我发现阿里巴巴有两套接口。一套是支付宝api,简称Aop,只有企业实名认证的账户才可以申请。另一套是淘宝开放平台的api,简称Top,个人可以申请,有的接口也需要企业认证。这两套接口应该使用哪一个想必很好分辨了,跟支付宝有关就申请支付宝的Aop,跟淘宝相关的就申请Top。

我需要的是支付宝接口,就在支付宝文档里找想要的接口。alipay.user.trade.search

二、使用接口

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

打开控制面板创建应用。

创建完成以后,会分配一个App ID给你。当你修改应用的时候还提示你需要填写一个回调地址,回调地址是什么呢?暂且一等,一步一步的来。

当应用创建完了以后是需要根据App ID来进行用户授权的,要不然你没有权限获取用户账号的交易信息。

授权的地址是:

登录授权示例:

https://openauth.alipay.com/oauth2/authorize.htm?client_id=top.21116668

支付授权示例:

https://openauth.alipay.com/oauth2/authorize.htm?client_id=top.21116668&scope=p

后边的client_id就是你的应用id。

授权的时候回出现如下图的界面,当用户使用你应用时候就会出现如下界面,此处我的功能需要只需要查询公司的账户交易信息,所以我就用公司的账户授权一下。

具体授权教程官方给出了:

https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/viewKbDoc.htm?key=236615_236620_259878&type=info

当你点击授权的时候,授权程序会重定向到你的回调地址,并加上一个code的参数,如下图,当然我回调地址已经做了操作,可以根据code获取一些信息了。

现在你就可以通过这个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的详细介绍:

https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/viewKbDoc.htm?key=236615_236620_259878&type=info

到这里就可以基本上搞定了这个获取信息的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就可以通过安全监测了。

申请周期大概在四五个工作日。

时间: 2024-11-05 20:27:10

支付宝api教程,支付宝根据交易号自动充值的相关文章

[转载]Python量化交易平台开发教程系列1-类CTP交易API的工作原理

原文出处:http://vnpy.org/2015/03/05/20150305_Python%E9%87%8F%E5%8C%96%E4%BA%A4%E6%98%93%E5%B9%B3%E5%8F%B0%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B%E7%B3%BB%E5%88%971-%E7%B1%BBCTP%E4%BA%A4%E6%98%93API%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86/ 类CTP交易API简介 国

Android 支付宝API使用流程

一.准备工作 〉1.下载开发包 https://b.alipay.com/order/productDetail.htm?productId=2014110308141993&tabId=4#ps-tabinfo-hash 压缩包下的"支付宝钱包支付接口开发包"中即有Andoid使用支付宝的JAR和Demo 〉2.创建支付宝应用 在支付宝开放平台申请创建应用 https://open.alipay.com/index.htm 支付宝平台的应用创建仅限于公司实名认证用户,个人帐号

支付宝-API接口解析-转账到银行

支付宝-API接口解析-转账到银行 扫码转账 测试地址 解析内容: alipays://platformapi/startapp?appId=09999988&actionType=toCard&sourceId=bill&cardNo=6217000030001234567&bankAccount=%E9%A9%AC%E4%BA%91&money=0.01&amount=0.01&bankMark=CCB&bankName=%E4%B8%A

C# MVC 微信支付教程系列之公众号支付

微信支付教程系列之公众号支付   今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通过公众号里面的菜单链接,进入公众号的商城,然后在里面完成购买和支付功能,我们可以看看官方对这个公众号支付的场景的解释,链接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1,通过这个官方的解释,那我们大概清楚这个公众号的用途了,下面,我就说

第三方支付的商户订单号和支付交易号

第一次开发第三方支付平台时,由于考虑不周,数据表里只保留了商户订单号,后续由商家查询订单就变得极为繁琐. 这里重新了解了两个号的区别: 商户订单号 对用户的用处 用户可以在商家的平台上,通过该订单号查询具体的订单详情(订单包含的都是商家自己的业务),是用户在商户这边进行消费的凭证 对商家的用处 第三方支付平台 执行各种操作(下单.支付.退款等)必需的字段: 方便用户通过商户订单号查询订单(总不能让人家拿着订单ID去查把- -,而且有的订单可能会有前缀标识是什么类型的订单,比如之前开发的奉化文旅云

Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下: web ├─ common │ └─ models │ └ User.php └─ frontend ├─ config │ └ main.php └─ controllers └ BookController.php 二.格式化响应 Yii2 RESTful支持JSON和XML格式,如果想指定

微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码

教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码 由于最近比较忙,这个教程没有连续上,我会尽量连载.书节上回,上次我介绍了代公众号调用接口的方法和SDK的使用.不少朋友也都加了QQ群(2489462

Yii2框架RESTful API教程(一) - 快速入门

前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RESTful的小伙伴快速入门. 一.目录结构 实现一个简单地RESTful API只需用到三个文件.目录如下: frontend ├─ config │ └ main.php ├─ controllers │ └ BookController.php └─ models └ Book.php 二.配置URL规则

Windows API 教程(七) hook 钩子监听

Windows API 教程(七) hook 钩子监听 Posted on 2013-08-15 茵蒂克丝 如何创建一个窗口 手动创建窗口的流程 实际代码 安装钩子 (Install hook) 钩子简介 SetWindowsHookEx 函数 设置监听[键盘]消息 设置监听[鼠标]消息 如何创建一个窗口 另外一个再录的 Windows SDK教程 里面有讲到快捷创建窗口的方式,不过这样的话要分好几个文件,感觉有点混所以这里就用原始的方式创建一个窗口. 那么,为什么讲到 hook(钩子)的时候要