• 支付宝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。
    授权的时候回出现如下图的界面,当用户使用你应用时候就会出现如下界面,此处我的功能需要只需要查询公司的账户交易信息,所以我就用公司的账户授权一下。
    具体授权教程官方给出了:
     
    当你点击授权的时候,授权程序会重定向到你的回调地址,并加上一个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就可以通过安全监测了。

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

  • 相关阅读:
    第三天 moyax
    mkfs.ext3 option
    write file to stroage trigger kernel warning
    download fomat install rootfs script
    custom usb-seriel udev relus for compatible usb-seriel devices using kermit
    Wifi Troughput Test using iperf
    learning uboot switch to standby system using button
    learning uboot support web http function in qca4531 cpu
    learngin uboot design parameter recovery mechanism
    learning uboot auto switch to stanbdy system in qca4531 cpu
  • 原文地址:https://www.cnblogs.com/qinwx/p/4278182.html
Copyright © 2020-2023  润新知