接口说明
该接口是页面跳转接口,用于生成用户访问支付宝的跳转链接。请在服务端执行支付宝sdk中pageexecute方法,读取响应中的body()结果。该结果用于跳转到支付宝页面,返回到用户浏览器渲染或重定向跳转到支付宝页面。具体使用方法请参考
手机网站支付
外部商户创建订单并支付
公共请求参数
业务请求参数
out_trade_no必选string(64)
【描述】商户网站唯一订单号
【示例值】70501111111s001111119
total_amount必选price(9)
【描述】订单总金额。
单位为元,精确到小数点后两位,取值范围:[0.01,100000000] 。
单位为元,精确到小数点后两位,取值范围:[0.01,100000000] 。
【示例值】9.00
subject必选string(256)
【描述】订单标题。
注意:不可使用特殊字符,如 /,=,& 等。
注意:不可使用特殊字符,如 /,=,& 等。
【示例值】大乐透
product_code必选string(64)
【描述】销售产品码,商家和支付宝签约的产品码。手机网站支付为:quick_wap_way
【示例值】quick_wap_way
auth_token可选string(40)
【描述】针对用户授权接口,获取用户相关数据时,用于标识用户授权关系
【示例值】appopenbb64d181d0146481ab6a762c00714cc27
quit_url可选string(400)
【描述】用户付款中途退出返回商户网站的地址
【示例值】http://www.taobao.com/product/113714.html
goods_detail可选goodsdetail[]
【描述】订单包含的商品列表信息,json格式,其它说明详见商品明细说明
goods_id必选string(32)
【描述】商品的编号
【示例值】apple-01
goods_name必选string(256)
【描述】商品名称
【示例值】ipad
quantity必选number(32)
【描述】商品数量
【示例值】1
price必选price(9)
【描述】商品单价,单位为元
【示例值】2000
alipay_goods_id可选string(32)
【描述】支付宝定义的统一商品编号
【示例值】20010001
goods_category可选string(24)
【描述】商品类目
【示例值】34543238
categories_tree可选string(128)
【描述】商品类目树,从商品类目根节点到叶子节点的类目id组成,类目id值使用|分割
【示例值】124868003|126232002|126252004
body可选string(1000)
【描述】商品描述信息
【示例值】特价手机
show_url可选string(400)
【描述】商品的展示地址
【示例值】http://www.alipay.com/xxx.jpg
time_expire可选string(32)
【描述】绝对超时时间,格式为yyyy-mm-dd hh:mm:ss。超时时间范围:1m~15d。
【示例值】2016-12-31 10:05:00
extend_params可选extendparams
【描述】业务扩展参数
sys_service_provider_id可选string(64)
【描述】系统商编号
该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的pid
该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的pid
【示例值】2088511833207846
hb_fq_num可选string(5)
【描述】使用花呗分期要进行的分期数
【示例值】3
hb_fq_seller_percent可选string(3)
【描述】使用花呗分期需要卖家承担的手续费比例的百分值,传入100代表100%
【示例值】100
industry_reflux_info可选string(512)
【描述】行业数据回流信息, 详见:地铁支付接口参数补充说明
【示例值】{\"scene_code\":\"metro_tradeorder\",\"channel\":\"xxxx\",\"scene_data\":{\"asset_name\":\"alipay\"}}
specified_seller_name可选string(32)
【描述】特殊场景下,允许商户指定交易展示的卖家名称
【示例值】xxx的跨境小铺
card_type可选string(64)
【描述】卡类型
【枚举值】
s0jp0000: s0jp0000
【示例值】s0jp0000
royalty_freeze可选string(16)
【描述】是否进行资金冻结,用于后续分账,true表示资金冻结,false或不传表示资金不冻结
【示例值】true
business_params可选string(512)
【描述】商户传入业务信息,具体值要和支付宝约定,应用于安全,营销等参数直传场景,格式为json格式
【示例值】{"mc_create_trade_ip":"127.0.0.1"}
passback_params可选string(512)
【描述】公用回传参数,如果请求时传递了该参数,则返回给商户时会回传该参数。支付宝只会在同步返回(包括跳转回商户网站)和异步通知时将该参数原样返回。本参数必须进行urlencode之后才可以发送给支付宝。
【示例值】merchantbiztype=3c&merchantbizno=2016010101111
merchant_order_no可选string(32)
【描述】商户原始订单号,最大长度限制32位
【示例值】20161008001
ext_user_info可选extuserinfo
【描述】外部指定买家
cert_no可选string(64)
【描述】买家证件号。
注:need_check_info=t或fix_buyer=t时该参数才有效,支付宝会比较买家在支付宝留存的证件号码与该参数传入的值是否匹配。
注:need_check_info=t或fix_buyer=t时该参数才有效,支付宝会比较买家在支付宝留存的证件号码与该参数传入的值是否匹配。
【示例值】362334768769238881
min_age可选string(3)
【描述】允许的最小买家年龄。
买家年龄必须大于等于所传数值
注:
1. need_check_info=t时该参数才有效
2. min_age为整数,必须大于等于0
买家年龄必须大于等于所传数值
注:
1. need_check_info=t时该参数才有效
2. min_age为整数,必须大于等于0
【示例值】18
name可选string(16)
【描述】指定买家姓名。
注: need_check_info=t或fix_buyer=t时该参数才有效
注: need_check_info=t或fix_buyer=t时该参数才有效
【示例值】李明
mobile可选string(20)
【描述】指定买家手机号。
注:该参数暂不校验
注:该参数暂不校验
【示例值】16587658765
cert_type可选string(128)
【描述】指定买家证件类型。
枚举值:
identity_card:身份证;
passport:护照;
officer_card:军官证;
soldier_card:士兵证;
hokou:户口本。如有其它类型需要支持,请与蚂蚁金服工作人员联系。
注: need_check_info=t或fix_buyer=t时该参数才有效,支付宝会比较买家在支付宝留存的证件类型与该参数传入的值是否匹配。
枚举值:
identity_card:身份证;
passport:护照;
officer_card:军官证;
soldier_card:士兵证;
hokou:户口本。如有其它类型需要支持,请与蚂蚁金服工作人员联系。
注: need_check_info=t或fix_buyer=t时该参数才有效,支付宝会比较买家在支付宝留存的证件类型与该参数传入的值是否匹配。
【枚举值】
identity_card: identity_card
passport: passport
officer_card: officer_card
【示例值】identity_card
fix_buyer可选string(8)
【描述】是否强制校验买家身份。
需要强制校验传:t;
不需要强制校验传:f或者不传;
当传t时,接口上必须指定cert_type、cert_no和name信息且支付宝会校验传入的信息跟支付买家的信息都匹配,否则报错。
默认为不校验。
需要强制校验传:t;
不需要强制校验传:f或者不传;
当传t时,接口上必须指定cert_type、cert_no和name信息且支付宝会校验传入的信息跟支付买家的信息都匹配,否则报错。
默认为不校验。
【示例值】f
need_check_info可选string(1)
【描述】是否强制校验买家信息;
需要强制校验传:t;
不需要强制校验传:f或者不传;
当传t时,支付宝会校验支付买家的信息与接口上传递的cert_type、cert_no、name或age是否匹配,只有接口传递了信息才会进行对应项的校验;只要有任何一项信息校验不匹配交易都会失败。如果传递了need_check_info,但是没有传任何校验项,则不进行任何校验。
默认为不校验。
需要强制校验传:t;
不需要强制校验传:f或者不传;
当传t时,支付宝会校验支付买家的信息与接口上传递的cert_type、cert_no、name或age是否匹配,只有接口传递了信息才会进行对应项的校验;只要有任何一项信息校验不匹配交易都会失败。如果传递了need_check_info,但是没有传任何校验项,则不进行任何校验。
默认为不校验。
【示例值】f
identity_hash可选string(128)
【描述】买家加密身份信息。当指定了此参数且指定need_check_info=t时,支付宝会对买家身份进行校验,校验逻辑为买家姓名、买家证件号拼接后的字符串,以sha256算法utf-8编码计算hash,若与传入的值不匹配则会拦截本次支付。注意:如果同时指定了用户明文身份信息(name,cert_type,cert_no中任意一个),则忽略identity_hash以明文参数校验。
【示例值】27bfcd1dee4f22c8fe8a2374af9b660419d1361b1c207e9b41a754a113f38fcc
常见请求示例
默认示例
package com.java.sdk.demo;
import com.alipay.api.alipayapiexception;
import com.alipay.api.alipayclient;
import com.alipay.api.defaultalipayclient;
import com.alipay.api.alipayconfig;
import com.alipay.api.domain.extuserinfo;
import com.alipay.api.response.alipaytradewappayresponse;
import com.alipay.api.domain.alipaytradewappaymodel;
import com.alipay.api.domain.extendparams;
import com.alipay.api.domain.goodsdetail;
import com.alipay.api.request.alipaytradewappayrequest;
import com.alipay.api.fileitem;
import java.util.base64;
import java.util.arraylist;
import java.util.list;
public class alipaytradewappay {
public static void main(string[] args) throws alipayapiexception {
// 初始化sdk
alipayclient alipayclient = new defaultalipayclient(getalipayconfig());
// 构造请求参数以调用接口
alipaytradewappayrequest request = new alipaytradewappayrequest();
alipaytradewappaymodel model = new alipaytradewappaymodel();
// 设置商户订单号
model.setouttradeno("70501111111s001111119");
// 设置订单总金额
model.settotalamount("9.00");
// 设置订单标题
model.setsubject("大乐透");
// 设置产品码
model.setproductcode("quick_wap_way");
// 设置针对用户授权接口
model.setauthtoken("appopenbb64d181d0146481ab6a762c00714cc27");
// 设置用户付款中途退出返回商户网站的地址
model.setquiturl("http://www.taobao.com/product/113714.html");
// 设置订单包含的商品列表信息
list<goodsdetail> goodsdetail = new arraylist<goodsdetail>();
goodsdetail goodsdetail0 = new goodsdetail();
goodsdetail0.setgoodsname("ipad");
goodsdetail0.setalipaygoodsid("20010001");
goodsdetail0.setquantity(1l);
goodsdetail0.setprice("2000");
goodsdetail0.setgoodsid("apple-01");
goodsdetail0.setgoodscategory("34543238");
goodsdetail0.setcategoriestree("124868003|126232002|126252004");
goodsdetail0.setbody("特价手机");
goodsdetail0.setshowurl("http://www.alipay.com/xxx.jpg");
goodsdetail.add(goodsdetail0);
model.setgoodsdetail(goodsdetail);
// 设置订单绝对超时时间
model.settimeexpire("2016-12-31 10:05:00");
// 设置业务扩展参数
extendparams extendparams = new extendparams();
extendparams.setsysserviceproviderid("2088511833207846");
extendparams.sethbfqsellerpercent("100");
extendparams.sethbfqnum("3");
extendparams.setindustryrefluxinfo("{\"scene_code\":\"metro_tradeorder\",\"channel\":\"xxxx\",\"scene_data\":{\"asset_name\":\"alipay\"}}");
extendparams.setspecifiedsellername("xxx的跨境小铺");
extendparams.setroyaltyfreeze("true");
extendparams.setcardtype("s0jp0000");
model.setextendparams(extendparams);
// 设置商户传入业务信息
model.setbusinessparams("{\"mc_create_trade_ip\":\"127.0.0.1\"}");
// 设置公用回传参数
model.setpassbackparams("merchantbiztype=3c&merchantbizno=2016010101111");
// 设置商户的原始订单号
model.setmerchantorderno("20161008001");
// 设置外部指定买家
extuserinfo extuserinfo = new extuserinfo();
extuserinfo.setcerttype("identity_card");
extuserinfo.setcertno("362334768769238881");
extuserinfo.setname("李明");
extuserinfo.setmobile("16587658765");
extuserinfo.setfixbuyer("f");
extuserinfo.setminage("18");
extuserinfo.setneedcheckinfo("f");
extuserinfo.setidentityhash("27bfcd1dee4f22c8fe8a2374af9b660419d1361b1c207e9b41a754a113f38fcc");
model.setextuserinfo(extuserinfo);
request.setbizmodel(model);
// 第三方代调用模式下请设置app_auth_token
// request.putothertextparam("app_auth_token", "<-- 请填写应用授权令牌 -->");
alipaytradewappayresponse response = alipayclient.pageexecute(request, "post");
// 如果需要返回get请求,请使用
// alipaytradewappayresponse response = alipayclient.pageexecute(request, "get");
string pageredirectiondata = response.getbody();
system.out.println(pageredirectiondata);
if (response.issuccess()) {
system.out.println("调用成功");
} else {
system.out.println("调用失败");
// sdk版本是"4.38.0.all"及以上,可以参考下面的示例获取诊断链接
// string diagnosisurl = diagnosisutils.getdiagnosis;
// system.out.println(diagnosisurl);
}
}
private static alipayconfig getalipayconfig() {
string privatekey = "<-- 请填写您的应用私钥,例如:miievqibadanb ... ... -->";
string alipaypublickey = "<-- 请填写您的支付宝公钥,例如:miibijanbg... -->";
alipayconfig alipayconfig = new alipayconfig();
alipayconfig.setserverurl("https://openapi.alipay.com/gateway.do");
alipayconfig.setappid("<-- 请填写您的appid,例如:2019091767145019 -->");
alipayconfig.setprivatekey(privatekey);
alipayconfig.setformat("json");
alipayconfig.setalipaypublickey(alipaypublickey);
alipayconfig.setcharset("utf-8");
alipayconfig.setsigntype("rsa2");
return alipayconfig;
}
}
说明:本示例仅供参考。
公共响应参数
无公共响应参数
业务响应参数
pageredirectiondata|跳转页面数据必选string(16384)
【描述】用于跳转支付宝页面的信息,post和get方法生成内容不同:使用post方法执行,结果为html form表单,在浏览器渲染即可;使用get方法会得到支付宝url,需要打开或重定向到该url。建议使用post方式。具体使用方法请参考
【示例值】请参考响应示例
响应示例
正常示例
说明:本示例仅供参考。
公共错误码
业务错误码
错误码 | 错误描述 | 凯发app官方网站的解决方案 |
---|---|---|
acq.access_forbidden | 无权限使用接口 | 未签约条码支付或者合同已到期 |
acq.context_inconsistent | 交易信息被篡改 | 更换商家订单号后,重新发起请求 |
acq.exist_forbidden_word | 订单信息中包含违禁词 | 修改订单信息后,重新发起请求 |
acq.invalid_parameter | 参数无效 | 检查请求参数,修改后重新发起请求 |
acq.partner_error | 应用app_id填写错误 | 联系支付宝小二,确认app_id的状态 |
acq.payment_request_has_risk | 支付有风险 | 更换其它付款方式 |
acq.risk_merchant_ip_not_exist | 当前交易未传入ip信息,创单失败,请传入ip后再发起支付 | 检查请求参数是否已经传入用户ip信息 |
acq.system_error | 接口返回错误 | 请立即调用查询订单api,查询当前订单的状态,并根据订单状态决定下一步的操作,如果多次调用依然报此错误码,请联系支付宝客服。 |
acq.total_fee_exceed | 订单总金额不在允许范围内 | 修改订单金额再发起请求 |
acq.trade_has_close | 交易已经关闭 | 更换商家订单号后,重新发起请求 |
acq.trade_has_success | 交易已被支付 | 确认该笔交易信息是否为当前买家的,如果是则认为交易付款成功,如果不是则更换商家订单号后,重新发起请求 |
触发通知类型
通知类型 | 描述 | 默认开启 |
---|---|---|
tradestatus.trade_closed | 交易关闭 | 1 |
tradestatus.trade_finished | 交易完结 | 1 |
tradestatus.trade_success | 支付成功 | 1 |
tradestatus.wait_buyer_pay | 交易创建 | 0 |
触发通知示例
https://www.merchant.com/receive_notify.htm?notify_type=trade_status_sync¬ify_id=91722adff935e8cfa58b3aabf4dead6ibe¬ify_time=2017-02-16 21:46:15&sign_type=rsa2&sign=wco t3d8kg71dtlkwn7r9pzuoxeabjwp8/fousxcuskxsovyxbpsaidpryscjhcjmaglncjokjqlj28/asl93jotw39fx6i07lxhnbpknezalwmvpdnqui01hzszf9v1i6ggzjbiad5lg8bzttxzoj87ub2i9guj3nr/nuc9vey=&merchant_app_id=2088102146225135&buyer_open_id=074a1cctg1lelxke4xqc0zgndid0nxi95b5lsnpazwyoco5&total_amount=null&refund_fee=null&subject=null&body=null&gmt_create=null&gmt_payment=null&gmt_refund=null&gmt_close=null&buyer_id=null&fund_bill_list=null&receipt_amount=null&invoice_amount=null&buyer_pay_amount=null&point_amount=null&voucher_detail_list=null&out_biz_no=null&buyer_logon_id=null&seller_email=null&passback_params=null&out_channel_type=null&trade_no=null&app_id=null&out_trade_no=null&seller_id=null&trade_status=null&charge_amount=8.88&charge_flags=bluesea_1&settlement_id=2018101610032004620239146945¬ify_action_type=paybyaccountaction/closetradeaction/reverseaction/finishfpaction/confirmdisburseaction/financingreceiptaction¤t_seller_received_amount=88.88&seller_received_total_amount=88.88&total_from_seller_fee=88.88&ff_current_period=1&mdiscount_amount=88.88&discount_amount=88.88&discount_goods_detail="[{\"goodsid\":\"standard1026181538\",\"goodsname\":\"雪碧\",\"discountamount\":\"10.00\"}]"&hb_fq_pay_info={"user_install_num":"3"}&receipt_currency_type=dc&hyb_amount=10.24&charge_info_list=[{"charge_fee":"0.01","original_charge_fee":"0.02","switch_fee_rate":"0.03","is_rating_on_trade_receiver":"y","is_rating_on_switch":"y"}]&enterprise_pay_info={"invoice_amount":"28.00","is_use_enterprise_pay":"true"}&cashier_type=app