本文介绍支付宝中当面付下属的条码支付、扫码支付、订单查询、退款申请的集成开发过程。
本文分为以下五个部分:
一、条码支付及二维码支付介绍
1. 条码支付
条码支付是支付宝给到线下传统行业的一种收款方式。商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款。用户仅需出示付款码,所有收款操作由商家端完成。其使用场景如下:
业务流程:
使用步骤:
- 用户登陆支付宝钱包,点击首页“付款”,进入付款码界面;
- 收银员在商家收银系统操作生成订单,用户确认支付金额;
- 用户出示钱包的“付款码”,收银员用扫码设备来扫描用户手机上的条码/二维码后,商家收银系统提交支付;
- 付款成功后商家收银系统会拿到支付成功或者失败的结果。
2. 扫码支付
扫码支付,指用户打开支付宝钱包中的“扫一扫”功能,扫描商家展示在某收银场景下的二维码并进行支付的模式。该模式适用于线下实体店支付、面对面支付等场景。
使用步骤:
- 用户登陆支付宝钱包,点击首页“付款-扫码付”,进入扫一扫界面;
- 收银员在商家收银系统操作生成支付宝订单,用户确认支付金额,并生成二维码;
- 用户使用钱包的“扫码付”,扫收银员提供的二维码,确认支付;
- 用户付款后商家收银系统会拿到支付成功或者失败的结果。
二、接口申请
企业在申请企业支付宝之后,进行功能申请并签约,然后在蚂蚁金服开放平台中申请应用如下(详细过程就略了)
然后在功能列表中,申请当面付这一功能,申请成功后如下。
这样,我们就有了当面付的权限了。
三、密钥生成
在支付宝当面付的接口中,使用了非对称加密算法,商户自己的公钥和私钥需要自己使用openssl手动生成。对这些概念比较陌生的话,请先自行先了解一下密码学的相关知识。openssl也可以从方倍工作室博客中找到。
下载支付宝官方提供的密钥生成工具openssl,然后执行以下命令就可以生成公钥和私钥。
其中
|
1
|
genrsa -out rsa_private_key.pem 1024
|
是用于生成rsa私钥,执行后在程序目录中生成一个文件rsa_private_key.pem,其内容如下
—–begin rsa private key—–
miicxaibaakbgqcyffrongd8q/1krh1cpssri360dxlhi7zxdpjgye5hkdwf7u9b
3zzu9erzpm90xe7gzrksxigourh4uqhmvrbto3e+liyoynpd6as3q427kctit7aj
hhicz6gwhegtuivlqiuwlsauqcbi6do4gezrlvadzus0wcjijoxw02rxsqidaqab
aogaxbjyyvac4zj3jph8yostlr5n13bwdatdw/glwwt+0rnnei90tqhrnvy7lnvn
jgrprts182tvgjopxmwsnebakhiugidpq99gle4lgd5lkwtzkd84bmvhatfnsccz
cevfqkg3tzd4t3fq93frilsnnzplhiw53jirstckr3rx9oecqqdwmshyc91hevmq
qvnasbgeickwxhodqjdm2lhkbx4mrb9jezfds6mxwdajf2/qw+tgtpn3ybccdw/h
nghhqtstakea1vtyjodawwode8x4fu0ipq9+e19mcvoajjlbh46mropwgodj3raq
t/thakeaydjabstaiy2j18hitiyh+1bgjqjbakgrjxh5ofxsg7uxibcofyjifi34
g7ecfxxvcqxaaw4u4n2uy0c0txkl5t+lxzeqg8d/gfbjj0qutvnzgdofdoecqbhy
ozncfk6xe8pguxquht4jg/iu4djwjt+kuzbsjerhtcvyly4jpzfuohrkom4fj6/4
uuqwrjmabfgzrx4+sfkcqcni8rcz6yprh5keoepo3uazalnenp8dkkhgqchawdk7
7nzlj727nt23sthfx6nkhzyrujgq5vx1lkl0wkukbxm=
—–end rsa private key—–
命令
|
1
|
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
|
是用于生成rsa公钥,执行后在程序目录中生成一个文件rsa_public_key.pem,其内容如下
—–begin public key—–
migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqcyffrongd8q/1krh1cpssri360
dxlhi7zxdpjgye5hkdwf7u9b3zzu9erzpm90xe7gzrksxigourh4uqhmvrbto3e+
liyoynpd6as3q427kctit7ajhhicz6gwhegtuivlqiuwlsauqcbi6do4gezrlvad
zus0wcjijoxw02rxsqidaqab
—–end public key—–
生成的这个rsa公钥,需要填写到应用中去,填写地址如下所示。私钥不需要填到配置中,到时候配置到代码中。
特别注意,密钥要去掉注释部分,且转换成一行字符,否则回车换行也成为密钥的一部分,将导致无法正常加解密。
同时,可以点击 “查看支付宝公钥”,将支付宝的公钥复制保存下来,后面的程序中将需要用到。
四、密钥生成api与密钥配置
公共参数
请求地址:
| 环境 | https请求地址 |
|---|---|
| 正式环境 | https://openapi.alipay.com/gateway.do |
公共请求参数:
| 参数 | 类型 | 是否必填 | 最大长度 | 描述 |
|---|---|---|---|---|
| app_id | string | 是 | 32 | 支付宝分配给开发者的应用id |
| method | string | 是 | 128 | 接口名称 |
| format | string | 否 | 40 | 仅支持json |
| charset | string | 是 | 10 | 请求使用的编码格式,如utf-8,gbk,gb2312等 |
| sign_type | string | 是 | 10 | 商户生成签名字符串所使用的签名算法类型,目前支持rsa |
| sign | string | 是 | 256 | 商户请求参数的签名串,详见签名 |
| timestamp | string | 是 | 19 | 发送请求的时间,格式"yyyy-mm-dd hh:mm:ss" |
| version | string | 是 | 3 | 调用的接口版本,固定为:1.0 |
| notify_url | string | 否 | 256 | 支付宝服务器主动通知商户服务器里指定的页面http/https路径。 |
| app_auth_token | string | 否 | 40 | 详见应用授权概述 |
| biz_content | string | 是 | – | 请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档 |
请求参数
| 参数 | 类型 | 是否必填 | 最大长度 | 描述 |
|---|---|---|---|---|
| out_trade_no | string | 必须 | 64 | 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复 |
| scene | string | 必须 | 32 | 支付场景 条码支付,取值:bar_code 声波支付,取值:wave_code |
| auth_code | string | 必须 | 32 | 支付授权码 |
| seller_id | string | 可选 | 28 | 如果该值为空,则默认为商户签约账号对应的支付宝用户id |
| total_amount | price | 可选 | 11 | 订单总金额,单位为元, |
| discountable_amount | price | 可选 | 11 | 参与优惠计算的金额,单位为元 |
| undiscountable_amount | price | 可选 | 11 | 不参与优惠计算的金额,单位为元 |
| subject | string | 必须 | 256 | 订单标题 |
| body | string | 可选 | 128 | 订单描述 |
| goods_detail | goodsdetail [] | 可选 | – | 订单包含的商品列表信息,json格式,其它说明详见商品明细说明 |
| operator_id | string | 可选 | 28 | 商户操作员编号 |
| store_id | string | 可选 | 32 | 商户门店编号 |
| terminal_id | string | 可选 | 32 | 商户机具终端编号 |
| alipay_store_id | string | 可选 | 32 | 支付宝的店铺编号 |
| extend_params | extendparams | 可选 | – | 业务扩展参数 |
| timeout_express | string | 可选 | 6 | 该笔订单允许的最晚付款时间,逾期将关闭交易。 |
| royalty_info | royaltyinfo | 可选 | – | 描述分账信息,json格式,其它说明详见分账说明 |
| sub_merchant | submerchant | 可选 | – | 二级商户信息,当前只对特殊银行机构特定场景下使用此字段 |
公共响应参数
| 参数 | 类型 | 是否必填 | 最大长度 | 描述 |
|---|---|---|---|---|
| code | string | 是 | – | 网关返回码,详见文档 |
| msg | string | 是 | – | 网关返回码描述,详见文档 |
| sub_code | string | 否 | – | 业务返回码,详见文档 |
| sub_msg | string | 否 | – | 业务返回码描述,详见文档 |
| sign | string | 是 | – | 签名,详见文档 |
响应参数
| 参数 | 类型 | 是否必填 | 最大长度 | 描述 |
|---|---|---|---|---|
| trade_no | string | 必填 | 64 | 支付宝交易号 |
| out_trade_no | string | 必填 | 64 | 商户订单号 |
| buyer_logon_id | string | 必填 | 100 | 买家支付宝账号 |
| total_amount | price | 必填 | 11 | 交易金额 |
| receipt_amount | string | 必填 | 11 | 实收金额 |
| buyer_pay_amount | price | 选填 | 11 | 买家付款的金额 |
| point_amount | price | 选填 | 11 | 使用积分宝付款的金额 |
| invoice_amount | price | 选填 | 11 | 交易中可给用户开具发票的金额 |
| gmt_payment | date | 必填 | 32 | 交易支付时间 |
| fund_bill_list | tradefundbill [] | 必填 | – | 交易支付使用的资金渠道 |
| card_balance | price | 选填 | 11 | 支付宝卡余额 |
| store_name | string | 选填 | 512 | 发生支付交易的商户门店名称 |
| buyer_user_id | string | 必填 | 28 | 买家在支付宝的用户id |
| discount_goods_detail | string | 必填 | – | 本次交易支付所使用的单品券优惠的商品优惠信息 |
系统中配置如下
|
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
26
|
<?php
$config = array (
//支付宝公钥
'alipay_public_key' => "migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqddi6d306q8fifcoatxyiuejhkrivyisrcc73s3vf1zt7xn8rnpwjxo8pwajmmvytn9n4hq632qjbvhf8sxhi/fesraprwctzvzqetrnrwvxlo5jvmrgi60j8ue1efilzpxv9je9mkjzomdssymzkh2qhurcmzyi/fcea3/cnmw0qidaqab",
//商户私钥
'merchant_private_key' => "miicxaibaakbgqcyffrongd8q/1krh1cpssri360dxlhi7zxdpjgye5hkdwf7u9b3zzu9erzpm90xe7gzrksxigourh4uqhmvrbto3e+liyoynpd6as3q427kctit7ajhhicz6gwhegtuivlqiuwlsauqcbi6do4gezrlvadzus0wcjijoxw02rxsqidaqabaogaxbjyyvac4zj3jph8yostlr5n13bwdatdw/glwwt+0rnnei90tqhrnvy7lnvnjgrprts182tvgjopxmwsnebakhiugidpq99gle4lgd5lkwtzkd84bmvhatfnscczcevfqkg3tzd4t3fq93frilsnnzplhiw53jirstckr3rx9oecqqdwmshyc91hevmqqvnasbgeickwxhodqjdm2lhkbx4mrb9jezfds6mxwdajf2/qw+tgtpn3ybccdw/hnghhqtstakea1vtyjodawwode8x4fu0ipq9+e19mcvoajjlbh46mropwgodj3raqt/thakeaydjabstaiy2j18hitiyh+1bgjqjbakgrjxh5ofxsg7uxibcofyjifi34g7ecfxxvcqxaaw4u4n2uy0c0txkl5t+lxzeqg8d/gfbjj0qutvnzgdofdoecqbhyozncfk6xe8pguxquht4jg/iu4djwjt+kuzbsjerhtcvyly4jpzfuohrkom4fj6/4uuqwrjmabfgzrx4+sfkcqcni8rcz6yprh5keoepo3uazalnenp8dkkhgqchawdk77nzlj727nt23sthfx6nkhzyrujgq5vx1lkl0wkukbxm=",
//编码格式
'charset' => "utf-8",
//支付宝网关
'gatewayurl' => "https://openapi.alipay.com/gateway.do",
//应用id
'app_id' => "2016061501500000",
//异步通知地址,只有扫码支付预下单可用
'notify_url' => "http://www.fangbei.org/alipay/notify.html",
//最大查询重试次数
'maxqueryretry' => "10",
//查询间隔
'queryduration' => "3"
);
|
其中支付宝公钥就是在前面中复制保存的,直接复制到程序中即可,而商户私钥是之前openssl中生成的私钥。appid是该服务的id号。
而这个异步通知将会接收扫码支付结果的通知。
五、条码支付、扫码支付、订单查询、退款申请
1. 条码支付
条码支付的参数配置如下
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
// (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线,
// 需保证商户系统端不能重复,建议通过数据库sequence生成,
$outtradeno = "barpay" . date('ymdhis') . mt_rand(100, 1000);
$subject = "方倍工作室-支付宝-当面付-扫码支付";
$totalamount = 0.01; // (必填) 订单总金额,单位为元,不能超过1亿元
// (必填) 付款条码,用户支付宝钱包手机app点击“付款”产生的付款条码
$authcode = $_post['auth_code']; //28开头18位数字
// 支付超时,线下扫码交易定义为5分钟
$timeexpress = "5m";
// 创建请求builder,设置请求参数
$barpayrequestbuilder = new alipaytradepaycontentbuilder();
$barpayrequestbuilder->setouttradeno($outtradeno);
$barpayrequestbuilder->settotalamount($totalamount);
$barpayrequestbuilder->setauthcode($authcode);
$barpayrequestbuilder->settimeexpress($timeexpress);
$barpayrequestbuilder->setsubject($subject);
// 调用barpay方法获取当面付应答
$barpay = new alipaytradeservice($config);
$barpayresult = $barpay->barpay($barpayrequestbuilder);
switch ($barpayresult->gettradestatus()) {
case "success":
echo "支付宝支付成功:" . "<br>--------------------------<br>";
print_r($barpayresult->getresponse());
break;
case "failed":
echo "支付宝支付失败!!!" . "<br>--------------------------<br>";
if (!empty($barpayresult->getresponse())) {
print_r($barpayresult->getresponse());
}
break;
case "unknown":
echo "系统异常,订单状态未知!!!" . "<br>--------------------------<br>";
if (!empty($barpayresult->getresponse())) {
print_r($barpayresult->getresponse());
}
break;
default:
echo "不支持的交易状态,交易返回异常!!!";
break;
}
return;
}
|
程序监测,最终提交的url如下
https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=rsa&method=alipay.trade.pay×tamp=2016-08-26+17%3a14%3a52&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=&charset=utf-8&app_auth_token=&sign=emvobahpkw6b1m%2boxytdbupixniaq73jtiphlh2vuyy4ocjq2uivtxwttw0y%2b7uexhwily8fyrdonrjwsjbatraqbgclppc4ybqswtpcb%2f76d65dmqeyrenk2sgcqhxcijnkroqjgaqmbqdhneeru7swsnj%2fff%2f025yltzk5lzq%3d
发送的json数据如下:
|
1
2
3
4
5
6
7
8
|
{
"scene":"bar_code",
"out_trade_no":"barpay20160826051452680",
"total_amount":0.01,
"auth_code":"289743098358423535",
"timeout_express":"5m",
"subject":"方倍工作室-支付宝-当面付-扫码支付"
}
|
接收到的数据如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
{
"alipay_trade_pay_response":{
"code":"10000",
"msg":"success",
"buyer_logon_id":"118***@qq.com",
"buyer_pay_amount":"0.01",
"buyer_user_id":"2088002364008751",
"fund_bill_list":[
{
"amount":"0.01",
"fund_channel":"alipayaccount"
}
],
"gmt_payment":"2016-08-26 17:14:59",
"invoice_amount":"0.01",
"open_id":"20880044751374809757987911112575",
"out_trade_no":"barpay20160826051452680",
"point_amount":"0.00",
"receipt_amount":"0.01",
"total_amount":"0.01",
"trade_no":"2016082621001004750244100034"
},
"sign":"pedemwh6x73t9lmwrzpgnvb1npnktodw6+8mduturnpvwxr1jht+x3crt2g4sdnhzxkjtzspuxjnylswisrtnqjjzqrp5xmujxmaahp/d5xxeywasdag5cj7ygd7t80budasde4eoqq6ox7kzj6lwkcphox13ti+ukt1dgcqs5o="
}
|
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
// (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线,
// 需保证商户系统端不能重复,建议通过数据库sequence生成,
$outtradeno = "qrpay".date('ymdhis').mt_rand(100,1000);
$subject = "方倍工作室-支付宝-当面付-扫码支付";
$totalamount = "0.01";
// 支付超时,线下扫码交易定义为5分钟
$timeexpress = "5m";
// 创建请求builder,设置请求参数
$qrpayrequestbuilder = new alipaytradeprecreatecontentbuilder();
$qrpayrequestbuilder->setouttradeno($outtradeno);
$qrpayrequestbuilder->settotalamount($totalamount);
$qrpayrequestbuilder->settimeexpress($timeexpress);
$qrpayrequestbuilder->setsubject($subject);
// 调用qrpay方法获取当面付应答
$qrpay = new alipaytradeservice($config);
$qrpayresult = $qrpay->qrpay($qrpayrequestbuilder);
// 根据状态值进行业务处理
switch ($qrpayresult->gettradestatus()){
case "success":
echo "支付宝创建订单二维码成功:"."<br>---------------------------------------<br>";
$response = $qrpayresult->getresponse();
$qrcode = $qrpay->create_erweima($response->qr_code);
echo $qrcode;
print_r($response);
break;
case "failed":
echo "支付宝创建订单二维码失败!!!"."<br>--------------------------<br>";
if(!empty($qrpayresult->getresponse())){
print_r($qrpayresult->getresponse());
}
break;
case "unknown":
echo "系统异常,状态未知!!!"."<br>--------------------------<br>";
if(!empty($qrpayresult->getresponse())){
print_r($qrpayresult->getresponse());
}
break;
default:
echo "不支持的返回状态,创建订单二维码返回异常!!!";
break;
}
|
生成的提交请求url如下
https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=rsa&method=alipay.trade.precreate×tamp=2016-08-26+17%3a38%3a13&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=http%3a%2f%2f123.daoqidata.com%2fweixin%2frawpost.php&charset=utf-8&app_auth_token=&sign=ayyijrz63romvet8ayz58uiyv3y5irbbx8ctfx6znhkt%2fu11u7isuywcxjrwrwco2oq2tdo%2fjtuhrbbdp5ulntmubbuktqdccf53pf5yiudgikxupfyugeurtg3gw4dqxoinkm6zb6mi0n%2f9m78a%2fnp8gtz4wthyhil%2b%2fozsyt4%3d
发送的json数据如下:
|
1
2
3
4
5
6
|
{
"out_trade_no":"qrpay20160826053813582",
"total_amount":"0.01",
"timeout_express":"5m",
"subject":"方倍工作室-支付宝-当面付-扫码支付"
}
|
返回的数据如下:
|
1
2
3
4
5
6
7
8
9
|
{
"alipay_trade_precreate_response":{
"code":"10000",
"msg":"success",
"out_trade_no":"qrpay20160826053813582",
"qr_code":"https://qr.alipay.com/bax00885xbhszseo9l7p404d"
},
"sign":"vfntgo2wmz+2ce1l05lnywtfn4inhxo/tuabzibhn4fplxncvyc9ihs8s7wa3fyw23g30luepehkzwobnfpujilonmexzvelhv3ylinz+q2mq5m8sb/d61ypvf4bgy1ovlrt4d3h/i3judmzedbroyfn9kb9vskkayc+b6l41zw="
}
|
其中的 就是二维码链接地址,使用接口将其成二维码后。
当支付宝用户扫码的时候,接口通知将收到如下数据
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
{
"notify_id":"4c2c04c3cc50e978d44212febe7c3f0lse",
"seller_email":"pay***@fangbei.org",
"notify_type":"trade_status_sync",
"sign":"r0irdymsq0+zusuglzkuthcr40hoop+cckojvbcma1uji3rqqfe5xehojb1nmbcape3zxpkhxmdlis109ngpbgy+nuebr7yzjyur/hxq3wxeyfz8aiwlvlozhrf7dqwxdho/vhyexaleqvri/03m0hxrwhzkuou1es9wmgzolqq=",
"trade_no":"2016082621001004750241229810",
"buyer_id":"2088002364008751",
"app_id":"2016061501500000",
"gmt_create":"2016-08-26 18:20:37",
"out_trade_no":"qrpay20160826062009757",
"seller_id":"2088421202724253",
"notify_time":"2016-08-26 18:20:37",
"subject":"方倍工作室-支付宝-当面付-扫码支付",
"trade_status":"wait_buyer_pay",
"open_id":"20880044751374809757987911112575",
"total_amount":"0.01",
"sign_type":"rsa",
"buyer_logon_id":"118***@qq.com"
}
|
当用户输入密码付款成功之后,将收到如下数据
|
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
|
{
"fund_bill_list":"[{"amount":"0.01","fundchannel":"alipayaccount"}]",
"subject":"方倍工作室-支付宝-当面付-扫码支付",
"trade_no":"2016082621001004750241229810",
"gmt_create":"2016-08-26 18:20:37",
"notify_type":"trade_status_sync",
"total_amount":"0.01",
"out_trade_no":"qrpay20160826062009757",
"invoice_amount":"0.01",
"open_id":"20880044751374809757987911112575",
"seller_id":"2088421202724253",
"notify_time":"2016-08-26 18:20:50",
"trade_status":"trade_success",
"gmt_payment":"2016-08-26 18:20:50",
"seller_email":"pay***@fangbei.org",
"receipt_amount":"0.01",
"buyer_id":"2088002364008751",
"app_id":"2016061501500000",
"notify_id":"56f97611ee609f46384b188b409e75else",
"buyer_logon_id":"118***@qq.com",
"sign_type":"rsa",
"buyer_pay_amount":"0.01",
"sign":"nf/kjryack0utqlnrnuymisnyw6hsxqpjpk2o5mhcz+wzuvqbrd3sq5poo3gu7lsrosiuuio4jeyel12ek2+w3ltcls9wei60syowpocjeygmvfnzbvr6+k7yo5au2wikm3mksxm2xxib9xpmmrdacghvqz2bxuaqujkpk1ft0s=",
"point_amount":"0.00"
}
|
3. 订单查询
订单查询的参数配置如下
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
////获取商户订单号
$out_trade_no = trim($_post['out_trade_no']);
//第三方应用授权令牌,商户授权系统商开发模式下使用
$appauthtoken = "";//根据真实值填写
//构造查询业务请求参数对象
$querycontentbuilder = new alipaytradequerycontentbuilder();
$querycontentbuilder->setouttradeno($out_trade_no);
$querycontentbuilder->setappauthtoken($appauthtoken);
//初始化类对象,调用querytraderesult方法获取查询应答
$queryresponse = new alipaytradeservice($config);
$queryresult = $queryresponse->querytraderesult($querycontentbuilder);
//根据查询返回结果状态进行业务处理
switch ($queryresult->gettradestatus()){
case "success":
echo "支付宝查询交易成功:"."<br>--------------------------<br>";
print_r($queryresult->getresponse());
break;
case "failed":
echo "支付宝查询交易失败或者交易已关闭!!!"."<br>--------------------------<br>";
if(!empty($queryresult->getresponse())){
print_r($queryresult->getresponse());
}
break;
case "unknown":
echo "系统异常,订单状态未知!!!"."<br>--------------------------<br>";
if(!empty($queryresult->getresponse())){
print_r($queryresult->getresponse());
}
break;
default:
echo "不支持的查询状态,交易返回异常!!!";
break;
}
|
最终提交的url如下
https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=rsa&method=alipay.trade.query×tamp=2016-08-26+18%3a27%3a07&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=&charset=utf-8&app_auth_token=&sign=eiuyjtes95quan3x9exbqzba%2fcvm5qgq0touss8mskcjhzacypnu7zt5mud31lpzpfhvejcksdwiq4tuntjpfpxirg7pktit09c%2bz8psua844y7hjkkx%2b4cvzcgto11m3ap0jecrtzw8hhjte9bpy1v43x2bsl5cp3ulpac1fsm%3d
发送的json数据如下:
|
1
2
3
|
{
"out_trade_no":"qrpay20160826053813582"
}
|
接收到的数据如下
|
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
|
{
"alipay_trade_query_response":{
"code":"10000",
"msg":"success",
"buyer_logon_id":"118***@qq.com",
"buyer_pay_amount":"0.01",
"buyer_user_id":"2088002364008751",
"fund_bill_list":[
{
"amount":"0.01",
"fund_channel":"alipayaccount"
}
],
"invoice_amount":"0.01",
"open_id":"20880044751374809757987911112575",
"out_trade_no":"qrpay20160826053813582",
"point_amount":"0.00",
"receipt_amount":"0.01",
"send_pay_date":"2016-08-26 17:38:58",
"total_amount":"0.01",
"trade_no":"2016082621001004750239053830",
"trade_status":"trade_success"
},
"sign":"e2mxjdahw/eqrfnkzgy/y//da5cmb54hnqa0cjbz+zcftuli1lvfms93onp7cpvk/fi7yxbkztkbpk29o4aewkxlsycrt92domayqahzyca7/5a3msc/awalyrfodwyjjdlncwdfrn9hx52ivrijxvlj0himviqqedavg28hpbo="
}
|
4. 订单退款
订单退款的参数配置如下
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
$out_trade_no = trim($_post['out_trade_no']);
$refund_amount = trim($_post['refund_amount']);
$out_request_no = trim($_post['out_request_no']);
//第三方应用授权令牌,商户授权系统商开发模式下使用
$appauthtoken = "";//根据真实值填写
//创建退款请求builder,设置参数
$refundrequestbuilder = new alipaytraderefundcontentbuilder();
$refundrequestbuilder->setouttradeno($out_trade_no);
$refundrequestbuilder->setrefundamount($refund_amount);
$refundrequestbuilder->setoutrequestno($out_request_no);
$refundrequestbuilder->setappauthtoken($appauthtoken);
//初始化类对象,调用refund获取退款应答
$refundresponse = new alipaytradeservice($config);
$refundresult = $refundresponse->refund($refundrequestbuilder);
//根据交易状态进行处理
switch ($refundresult->gettradestatus()){
case "success":
echo "支付宝退款成功:"."<br>--------------------------<br>";
print_r($refundresult->getresponse());
break;
case "failed":
echo "支付宝退款失败!!!"."<br>--------------------------<br>";
if(!empty($refundresult->getresponse())){
print_r($refundresult->getresponse());
}
break;
case "unknown":
echo "系统异常,订单状态未知!!!"."<br>--------------------------<br>";
if(!empty($refundresult->getresponse())){
print_r($refundresult->getresponse());
}
break;
default:
echo "不支持的交易状态,交易返回异常!!!";
break;
}
|
最终提交的url如下
https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=rsa&method=alipay.trade.refund×tamp=2016-08-26+18%3a47%3a35&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=&charset=utf-8&app_auth_token=&sign=y1c5qwglaq0t3brvietqfnijrqmn%2fl9vmla1xgxkcexercjopmys2rpohaw%2f2pjeokjc7r9qafdgknq4lhzxhbrd8sxlpqimps6awcw9p8s%2fzc2oqcjnlfapx6lh8veharj4wzdayezla48ttoqljumgpritgoxyjhhyukdbqss%3d
发送的json数据如下:
|
1
2
3
4
5
|
{
"out_trade_no":"qrpay20160826053813582",
"refund_amount":"0.01",
"out_request_no":"1"
}
|
接收到的数据如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
{
"alipay_trade_refund_response":{
"code":"10000",
"msg":"success",
"buyer_logon_id":"123***@qq.com",
"buyer_user_id":"2088002364008751",
"fund_change":"y",
"gmt_refund_pay":"2016-08-26 18:47:41",
"open_id":"20880044751374809757987911112575",
"out_trade_no":"qrpay20160826053813582",
"refund_detail_item_list":[
{
"amount":"0.01",
"fund_channel":"alipayaccount"
}
],
"refund_fee":"0.01",
"send_back_fee":"0.01",
"trade_no":"2016082621001004750239053830"
},
"sign":"ydnsmpx5y0rqes0zbfnxrfvip8hf0w30or74cmtwkvpo2byee6tqc+pbnwessz2xsgloztyy7o+sia07l+fmhdv/ptt6qx1mvgqv7rhzodkls0zdrs/5/fy9oyj01xs1wb8od/93inlzdkd2yw9g0he6qgylpcxutkmwuasd7bm="
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。
相关文章
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
Debian 8或Debian 9(64 位)安装 .NET Core
2025-05-29 110 -
详细探讨台湾数据中心的环境特点、基础设施建设、及其对业务运营的影响
2025-05-25 41 -
2025-05-29 80
-
2025-05-25 29
-
2025-05-27 48



