如何使用沙箱测试单笔转账到支付宝账号(php版)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21051503/article/details/82859751
说明: 
  本帖是利用支付宝沙箱测试电脑网站支付接口 
  测试环境:Apache2.4.23 +php 5.6.25 
  沙箱环境测试正式环境请修改网关为下方值 
  复制代码

1

正式环境网关:https://openapi.alipay.com/gateway.do


注意事项: 
  1.目前仅支持账户余额渠道付款。 
  2.转账额度 
    1)单日转出累计额度为100万元。 
    2)转账给个人支付宝账户,单笔最高5万元;转账给企业支付宝账户,单笔最高10万元。 

特殊逻辑注意点: 
  1)如果商户重复请求转账,支付宝会幂等返回成功结果,商户必须对重复转账的业务做好幂等处理;如果不判断, 
  存在潜在的风险,商户自行承担因此而产生的所有损失。 
  2)如果调用alipay.fund.trans.toaccount.transfer掉单时,或返回结果code=20000时,或返回结果code=40004, 
  sub_code= SYSTEM_ERROR时,请调用alipay.fund.trans.order.query发起查询,如果未查询到结果, 
  请保持原请求不变再次请求alipay.fund.trans.toaccount.transfer接口。 
  3)商户处理转账结果时,对于错误码的处理,只能使用sub_code作为后续处理的判断依据, 
  不可使用sub_msg作为后续处理的判断依据。 

参数解读: 
  1.amount 转账金额,只支持2位小数,小数点前最大支持13位,金额必须大于等于0.1元。 
  2.payer_show_name付款方姓名(最长支持100个英文/50个汉字)。显示在收款方的账单详情页。如果该字段不传 
 则默认显示付款方的支付宝认证姓名或单位名称。 
  3.payee_real_name收款方真实姓名(最长支持100个英文/50个汉字),如果本参数不为空,则会校验该账户在支付宝 
 登记的实名是否与收款方真实姓名一致。 
  4.remark转账备注(支持200个英文/100个汉字)。当付款方为企业账户,且转账金额达到(大于等于)50000元, 
  remark不能为空。收款方可见,会展示在收款用户的收支详情中。 

测试流程(声明:demo仅做参考使用): 
  1.下载官方【服务端sdk】放到项目中,注意:官方sdk php环境要求php5.5以上 
  2.看下方代码 
    1)收款方账户类型为:ALIPAY_LOGONID 
   复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<?php

require_once 'AopSdk.php';

$aop new AopClient ();

$aop->appId = '填写您的沙箱appid';

$aop->rsaPrivateKey = '填写您的私钥';

$aop->alipayrsaPublicKey='填写您的支付宝公钥';

$aop->gatewayUrl = 'https://openapi.alipaydev.com/gateway.do';

$aop->apiVersion = '1.0';

$aop->signType = 'RSA2';

$aop->postCharset='utf-8';

$aop->format='json';

$date=date("YmdHis");

$arr=range(1000,9999);

shuffle($arr);

$request new AlipayFundTransToaccountTransferRequest ();

//收款方账户类型为:ALIPAY_LOGONID:支付宝登录号,支持邮箱和手机号格式。

$request->setBizContent("{" .

    "\"out_biz_no\":\"".$date.$arr[0]."\"," .

    "\"payee_type\":\"ALIPAY_LOGONID\"," .

    "\"payee_account\":\"请填写您转账的账号\"," .

    "\"amount\":\"0.1\"," .

    "\"remark\":\"单笔转账测试\"" .

    "}");

$result $aop->execute ($request);

var_dump($result);


    2)收款方账户类型为:ALIPAY_USERID 
    复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<?php

require_once 'AopSdk.php';

$aop new AopClient ();

$aop->appId = '填写您的appid';

$aop->rsaPrivateKey = '填写您的私钥';

$aop->alipayrsaPublicKey='填写您的支付宝公钥';

$aop->gatewayUrl = 'https://openapi.alipaydev.com/gateway.do';

$aop->apiVersion = '1.0';

$aop->signType = 'RSA2';

$aop->postCharset='utf-8';

$aop->format='json';

$date=date("YmdHis");

$arr=range(1000,9999);

shuffle($arr);

$request new AlipayFundTransToaccountTransferRequest ();

// 收款方账户类型为:ALIPAY_USERID:支付宝账号对应的支付宝唯一用户号。以2088开头的16位纯数字组成。

$request->setBizContent("{" .

        "\"out_biz_no\":\"".$date.$arr[0]."\"," .

        "\"payee_type\":\"ALIPAY_USERID\"," .

        "\"payee_account\":\"填写您要转账的2088\"," .

        "\"amount\":\"0.1\"," .

        "\"remark\":\"单笔转账测试\"" .

        "}");

$result $aop->execute ($request);

var_dump($result);


    3)alipay.fund.trans.order.query(查询转账订单接口) 
    说明:商户可通过该接口查询转账订单的状态、支付时间等相关信息,主要应用于B2C转账订单查询的场景 
    复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<?php

/**

 * 2017-08-01

 * by 我是个导演

 * 欢迎访问支付宝论坛:https://openclub.alipay.com/index.php

 */

require_once 'AopSdk.php';

$aop new AopClient ();

$aop->appId = '填写您的appid';

$aop->rsaPrivateKey = '填写您的私钥';

$aop->alipayrsaPublicKey='填写您的支付宝公钥';

$aop->gatewayUrl = 'https://openapi.alipaydev.com/gateway.do';

$aop->apiVersion = '1.0';

$aop->signType = 'RSA2';

$aop->postCharset='utf-8';

$aop->format='json';

$request new AlipayFundTransOrderQueryRequest ();

//商户转账唯一订单号: 和支付宝转账单据号不能同时为空。当和支付宝转账单据号同时提供时,将用支付宝转账单据号进行查询,忽略本参数。

$request->setBizContent("{" .

"\"out_biz_no\":\"填写商户转账唯一订单号\"," .

"\"order_id\":\"填写支付宝转账单据号\"" .

"}");

$result $aop->execute ( $request);

var_dump($result);


  沙箱版demo: 
    alipay.fund.trans.toaccount.transfer.zip 
  如果大家在集成中遇到单笔转账问题欢迎在帖子下面追问

回复  (32) 写私信关注  (0)

 

张小贤 | 2018-01-03 15:19:29

我使用这个借口  代码跟你一样的  但是一直说我  缺少签名参数
$aop = new \AopClient();

$aop->appId = '2017052607355695';
$aop->rsaPrivateKey = getcwd().'/cert/rsa_private_key.pem';
$aop->alipayrsaPublicKey = getcwd().'/cert/rsa_public_key.pem';
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='utf-8';
$aop->format='json';
$date=date("YmdHis");
$arr=range(1000,9999);
shuffle($arr);
$request = new \AlipayFundTransToaccountTransferRequest ();
//收款方账户类型为:ALIPAY_LOGONID:支付宝登录号,支持邮箱和手机号格式。
$request->setBizContent("{" .
"\"out_biz_no\":\"".$date.$arr[0]."\"," .
"\"payee_type\":\"ALIPAY_LOGONID\"," .
"\"payee_account\":\"15884535387\"," .
"\"amount\":\"0.1\"," .
"\"remark\":\"单笔转账测试\"" .
"}");
$result = $aop->execute ($request);
var_dump($result);

回复(1)写私信

我是个导演 | 2018-01-03 15:28:08

张小贤:我使用这个借口  代码跟你一样的  但是一直说我  缺少签名参数
$aop = new \AopClient();

$aop->appId = '2017052607355695';
$aop->rsaPrivateKey =...回到原帖
$aop->rsaPrivateKey 和$aop->alipayrsaPublicKey  直接配置字符串方式测试 看看是否可以

回复(1)写私信

张小贤 | 2018-01-04 12:40:55

我是个导演:$aop->rsaPrivateKey 和$aop->alipayrsaPublicKey  直接配置字符串方式测试 看看是否可以回到原帖
直接配置可以  现在转账也能成功了  但是 一直出这个错误   私钥公钥 都没问题了 
:(
check sign Fail! [sign=azQ9S5Kou7XSMpSjxSIuNBjFIrCXZF0up4uDyZL89IeUqHwrRVX6q68yLKcU1cO9uJecj/avWp7xTZPQGOwkVp0LLMDEQ899gtzowB8Py+dQS6vIMw9T9HGgCKrDJGLGU4bNfYp3NzxhZuXd4ORr4KPYT7vFXQ6u+FsnXp92ywvUmsYCqIaovL4f3i57a4wuMOF08DC9I2vck4YSfktGnHSyHtkx0GB6f+YwLowpIhM+IAzKkVZiaBu7CKit63urLUxl24iCHnXoUrW7VMRqNMNunl7R8KbHoBHSUZS2LTEwHVGkh2dSP2n2FFSrKOfXaUFyrFXKx1NuaKWT1fTd8w==, signSourceData={"code":"10000","msg":"Success","order_id":"20180104110070001502800035206101","out_biz_no":"201801041239186486","pay_date":"2018-01-04 12:39:19"}]
错误位置
FILE: E:\phpStudy\WWW\meiping\ThinkPHP\Library\Vendor\AlipayTx\aop\AopClient.php  LINE: 1053

回复(1)写私信

我是个导演 | 2018-01-04 13:15:03

张小贤:直接配置可以  现在转账也能成功了  但是 一直出这个错误   私钥公钥 都没问题了 
:(
check sign Fail! 
错误位置
FILE: E:\phpStudy\WWW\meiping\ThinkPHP\Library\Ven...回到原帖
check sign Fail! 这个报错参考这个帖子自查一下:https://openclub.alipay.com/read.php?tid=2001&fid=25 基本上上使用的$aop->alipayrsaPublicKey 配置支付宝公钥不对。先自查有疑问再追问

回复写私信

邓庆 | 2018-01-09 10:59:11

Fatal error: Uncaught exception 'Exception' with message 'check sign Fail!

回复(1)写私信

战狼 | 2018-01-09 11:15:08

邓庆:Fatal error: Uncaught exception 'Exception' with message 'check sign Fail!回到原帖
你好,报这个错主要是支付宝公钥配置错误,不同环境的公钥是不同的,你可以参考下 
沙箱公钥查看地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info 
openapi网关公钥查看地址:https://openhome.alipay.com/platform/keyManage.htm 
mapi网关公钥查看地址:https://openhome.alipay.com/platform/keyManage.htm?keyType=partner

回复写私信

杨刚 | 2018-01-23 13:51:16

 Fatal error: Uncaught Error: Call to undefined function openssl_sign() 
 Error: Call to undefined function openssl_sign() in F:\
这是什么意思呀 我在官方下的

回复(1)写私信

ten | 2018-01-23 13:56:37

杨刚:Fatal error: Uncaught Error: Call to undefined function openssl_sign() 
 Error: Call to undefined function openssl_sign(...回到原帖
这边开发语言是什么?如果是PHP的话,建议参考帖子【
Fatal error: Call to undefined function openssl_sign() in】:https://openclub.alipay.com/read.php?tid=2130&fid=72,有疑问再追问

回复写私信

adm | 2018-02-11 19:52:26

网关改成沙箱正常, 改成正式环境提示check sign Fail! 

回复(1)写私信

adm | 2018-02-11 20:32:10

adm:网关改成沙箱正常, 改成正式环境提示check sign Fail!回到原帖
https://docs.open.alipay.com/common/105806, 已解决, urlencode问题

回复写私信

问题有点 | 2018-03-28 16:32:44

请问沙箱环境测试的时候,报错:[code] => 40004
            [msg] => Business Failed
            [sub_code] => PAYEE_NOT_EXIST
            [sub_msg] => 收款账号不存在
怎么解决,我填的收款账号是正确的呀

回复(1)写私信

天籁 | 2018-03-28 16:37:18

问题有点:请问沙箱环境测试的时候,报错: => 40004
             => Business Failed
             => PAYEE_NOT_EXIST
             => 收款账号不存在
怎么解决,我填...回到原帖
沙箱测试单笔转账收款账号是需要使用沙箱的买家账号才可以的不可以使用正式的支付宝账号,这个是沙箱账号的获取链接:https://openhome.alipay.com/platform/appDaily.htm?tab=account ,你也可以参考:https://openclub.alipay.com/read.php?tid=730&fid=74 这个帖子来获取沙箱账号 有问题再追问

回复写私信

问题有点 | 2018-03-28 17:04:01

恩恩,上面那个问题,解决了。
但是现在验签失败,签名验证通过不了

回复(1)写私信

问题有点 | 2018-03-28 17:06:53

  • 图片:J0{2NX3TYB(2C7M@SL7Q}DC.png


代码跟demo是一样的

回复

天籁 | 2018-03-28 17:07:50

问题有点:恩恩,上面那个问题,解决了。
但是现在验签失败,签名验证通过不了 回到原帖
看你另外的帖子 应该是调用接口成功 但是同步返回验签失败,这个一般是支付宝公钥使用错误导致,alipayrsaPublicKey这个是支付宝公钥 不是你自己生成的那一对秘钥中的公钥,建议可以参考这个帖子来获取支付宝公钥:https://openclub.alipay.com/read.php?tid=2001&fid=69

回复(1)写私信

问题有点 | 2018-03-28 17:07:56

回复写私信

问题有点 | 2018-03-28 17:57:47

天籁:看你另外的帖子 应该是调用接口成功 但是同步返回验签失败,这个一般是支付宝公钥使用错误导致,alipayrsaPublicKey这个是支付宝公钥 不是你自己生成的那一对秘钥中的公钥,建议可以参考这个帖子来获取支付宝公钥: https://op... 回到原帖

我是从这里拷贝的公钥

回复(1)写私信

天籁 | 2018-03-28 18:06:10

问题有点:我是从这里拷贝的公钥 回到原帖
请你这边发一下你验签出错的报错截图,这边看一下

回复写私信

问题有点 | 2018-03-28 18:21:03



断点打到直接就是空,啥都没报, 
如果这里不打断点,直接继续下去,就到了下面这个地方 

回复写私信

问题有点 | 2018-03-28 19:12:42

SignData Object
(
    [signSourceData] => {"code":"10000","msg":"Success","order_id":"20180328110070001502920000081743","out_biz_no":"201803281910406838","pay_date":"2018-03-28 19:10:40"}
    [sign] => ZQ18usBWkTHu3/bSQ3CVjllZr4NvjgNQkm09H9H0ZD4crW/L3AzKkcORX4f4yucYFKmg3h1qjgGU2ThfR+PSyOenVb70P7ppS6ginByb5syeZFqvyKPCHrnFE87cRnleEelPBcMwBJXf/MfLbHiSODzi5JfLs2v2yIEGl4UI7pSCTCj3mmbHs8Eg3+K9/0Iwc9CJmSm7PAFIbbLMX35f4HoxiJv6hHjv43WNeAcpLHQYjGbmWZxTsLePPmOBgOMHoyPtWdwnLxY6jSh8zTrKZkXXe3lnck42h6mpu+234AhyUZYRYHRPQkZ6Elj0N57fdfSwOnIBK2eRTkJksp78Ag==
)

这是$signData的值,不知道为什么会验签不成功,没有报错数据,而是直接就进入后面那个抛出异常的代码了

回复(1)写私信

天籁 | 2018-03-29 09:10:24

问题有点:SignData Object
(
     => {"code":"10000","msg":"Success","order_id":"20180328110070001502920000081743","out_biz_no":"20... 回到原帖
你好,这边私信你了

回复写私信

哈哈哈哈sss | 2018-04-10 09:29:14

这边转账成功了还是报签名有问题,这个。。。 

回复(1)写私信

颠覆白的黑 | 2018-04-10 10:05:21

哈哈哈哈sss:这边转账成功了还是报签名有问题,这个。。。 回到原帖
能否提供一下完整的报错信息,这边看的不是很全面,建议将异常报错信息完整的贴出来看一下
还有建议是否使用我们的这个demo进行测试过呢,建议测试一下

回复写私信

高颜值反弹一切伤害 | 2018-04-23 11:43:19

我照着你的代码,一模一样,除了参数 
然后 dd($aop,$request);

  • 参数可在吧,照着你的写的
  • 然后就报这个错误,一脸懵逼中

回复写私信

高颜值反弹一切伤害 | 2018-04-23 11:46:43

是laravel 框架的问题吗,这个什么 sin,我这个问题从官方文档绕到你的帖子,绕了一晚上也没看懂这sin是个什么参数

回复(1)写私信

我是个导演 | 2018-04-23 12:06:55

高颜值反弹一切伤害:是laravel 框架的问题吗,这个什么 sin,我这个问题从官方文档绕到你的帖子,绕了一晚上也没看懂这sin是个什么参数 回到原帖

这边看你的appid填写错误,appid是年份开头,你填写的2088是pid所以不对,先修改这个在测试看看是否报错。另外看你的截图使用的是沙箱的网关,请确认自己是否使用的是沙箱测试单笔转账接口

 



  •  

回复写私信

宝宝知道 | 2018-05-13 16:39:17

Fatal error: Uncaught Error: Class 'SignData' not found in /Users/caofeiyu/Desktop/alipay-sdk-PHP-3.0.0/aop/AopClient.php:874
Stack trace:
#0 /Users/caofeiyu/Desktop/alipay-sdk-PHP-3.0.0/aop/AopClient.php(534): AopClient->parserJSONSignData(Object(AlipayFundTransToaccountTransferRequest), '{"alipay_fund_t...', Object(stdClass))
#1 /Users/caofeiyu/Desktop/alipay-sdk-PHP-3.0.0/aop/test.php(25): AopClient->execute(Object(AlipayFundTransToaccountTransferRequest))
#2 {main}
  thrown in /Users/caofeiyu/Desktop/alipay-sdk-PHP-3.0.0/aop/AopClient.php on line 874

这个报错是因为什么呢?

回复(1)写私信

我是个导演 | 2018-05-14 09:21:36

宝宝知道:Fatal error: Uncaught Error: Class 'SignData' not found in /Users/caofeiyu/Desktop/alipay-sdk-PHP-3.0.0/aop/AopClient.ph... 回到原帖
建议参考一下是否是这个原因导致:https://openclub.alipay.com/read.php?tid=3279&fid=72

回复写私信

初夏大大 | 2018-05-30 14:24:03

 

PHP 5.6 .。。。。 文件都对着呢,

回复(1)写私信

天籁 | 2018-05-30 14:58:36

初夏大大:<p><img src="//alipaybbs.oss-cn-hangzhou.aliyuncs.com/1805/thread/74_34834_0c6eb8684c93397.png" alt="" width="976" heigh... 回到原帖
https://openclub.alipay.com/read.php?tid=2130&fid=72  建议您参考这个文档自查一下 有问题再追问

回复写私信

ruchang | 2018-07-06 15:34:56

$result;
没有返回值。正常转过去了

回复(1)写私信

天籁 | 2018-07-06 15:45:47

ruchang:$result;
没有返回值。正常转过去了 回到原帖
是转账成功没有收到返回信息吗  请截图一下你的请求的代码这边看一下

回复

猜你喜欢

转载自blog.csdn.net/qq_21051503/article/details/82859751