支付宝支付开发——当面付条码支付和扫码支付实例

时间:2022-11-06 16:09:17

本文介绍支付宝当面付下属的条码支付、扫码支付、订单查询、退款申请的集成开发过程。

 本文分为以下五个部分:

  • 条码支付和扫码支付介绍
  • 申请应用
  • 密钥生成及配置
  • api及sdk集成
  • 条码支付、扫码支付、订单查询、退款申请

 一、条码支付及二维码支付介绍

1. 条码支付
条码支付是支付宝给到线下传统行业的一种收款方式。商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款。用户仅需出示付款码,所有收款操作由商家端完成。其使用场景如下:支付宝支付开发——当面付条码支付和扫码支付实例
业务流程:支付宝支付开发——当面付条码支付和扫码支付实例

使用步骤:

  1. 用户登陆支付宝钱包,点击首页“付款”,进入付款码界面;
  2. 收银员在商家收银系统操作生成订单,用户确认支付金额;
  3. 用户出示钱包的“付款码”,收银员用扫码设备来扫描用户手机上的条码/二维码后,商家收银系统提交支付;
  4. 付款成功后商家收银系统会拿到支付成功或者失败的结果。

2. 扫码支付

扫码支付,指用户打开支付宝钱包中的“扫一扫”功能,扫描商家展示在某收银场景下的二维码并进行支付的模式。该模式适用于线下实体店支付、面对面支付等场景。

其使用场景如下:支付宝支付开发——当面付条码支付和扫码支付实例
业务流程:支付宝支付开发——当面付条码支付和扫码支付实例

使用步骤:

  1. 用户登陆支付宝钱包,点击首页“付款-扫码付”,进入扫一扫界面;
  2. 收银员在商家收银系统操作生成支付宝订单,用户确认支付金额,并生成二维码;
  3. 用户使用钱包的“扫码付”,扫收银员提供的二维码,确认支付;
  4. 用户付款后商家收银系统会拿到支付成功或者失败的结果。 

二、接口申请

企业在申请企业支付宝之后,进行功能申请并签约,然后在蚂蚁金服开放平台中申请应用如下(详细过程就略了)支付宝支付开发——当面付条码支付和扫码支付实例
然后在功能列表中,申请当面付这一功能,申请成功后如下。支付宝支付开发——当面付条码支付和扫码支付实例
这样,我们就有了当面付的权限了。

三、密钥生成

在支付宝当面付的接口中,使用了非对称加密算法,商户自己的公钥和私钥需要自己使用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="
}

2. 扫码支付
扫码支付的参数配置如下

?
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="
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。