支付宝生活号接口
1、修订记录
修订 |
日期 |
说明 |
作者 |
0.1 |
2018/01/24 |
新接口参数定义 |
郭勇 |
0.2 |
2021/04/13 |
增加子商户ip submer_ip |
|
0.3 |
2021/10/16 |
删除出参payer_bank_account_no |
|
0.4 |
2021/12/27 |
支持国密 |
王晶 |
0.5 |
2021/12/28 |
新增支付宝上送门店信息参数(store_id,alipay_store_id,operator_id、terminal_id) |
林竞 |
0.6 |
2022/01/11 |
新增支付宝花呗分期专属字段 business_params |
刘雷 |
0.7 |
2022/01/25 |
limit_credit_pay 新增花呗相关操作值:2禁用花呗,3禁用花呗分期,4禁用所有信用支付类型 |
刘雷 |
0.8 |
2022/02/17 |
seller_name修改为非必填 |
王晶 |
0.9 |
2022/03/17 |
version为3.9时 新增支付成功异步通知营销相关字段 |
刘雷 |
1.0 |
2022/03/18 |
新增银联259号文条码改造相关字段 |
刘雷 |
1.1 |
2022/07/05 |
新增实名认证信息 |
刘雷 |
1.2 |
2022/07/27 |
新增付款方gps信息和付款方ip入参 |
王晶 |
1.3 |
2022/12/14 |
新增支付宝业务拓展参数extend_params_channel |
刘军 |
1.4 |
2023/01/09 |
新增花呗分期期数支持3期,新增分期类型fq_type |
林竞 |
1.5 |
2023/01/09 |
新增同步响应参数发往渠道流水号channel_send_sn,渠道返回流水号channel_recv_sn |
林竞 |
1.6 |
2024/01/12 |
terminal_ip字段长度限制由8改为64位 |
康少雄 |
1.7 |
2024/11/04 |
新增请求参数merchant_marketing_info商户自主营销信息 |
郑世康 |
2、业务说明
(1)场景说明
帮助商户代创建和代运营生活号。在商户完成对开发者的授权后,开发者即默认添加为商户生活号的操作员,即可通过接口或生活号后台帮商户维护生活号。
(2)接口说明
1、调用此接口前,请确保已开通“生活号第三方应用“
2、代创建提交且支付宝审核通过后,下一步则需商户做代创建的授权确认,商户可登录商家中心b.alipay.com查看待办事项,并确认授权
3、请求地址
4、请求参数说明
4.1公共请求参数
参数 |
类型(字节长度) |
必填 |
参数说明 |
method |
String(128) |
Y |
接口名称 固定值 ysepay.online.alijsapi.pay |
partner_id |
String(20) |
Y |
在银盛支付开设的服务商商户号,请联系客户经理提供 |
timestamp |
String(19) |
Y |
发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" 2014-07-24 03:07:50 |
charset |
String(10) |
Y |
商户网站使用的编码格式,如UTF-8、GBK、GB2312等。默认值 UTF-8 |
sign_type |
String(10) |
Y |
报文签名算法,RSA、SM |
sign |
String(256) |
Y |
签名字符串,再用Base64编码 |
notify_url |
String(190) |
Y |
交易成功异步通知到商户的后台地址,http路径支持多个url进行异步通知,多个url用分隔符“,”分开,格式如:url1,url2,url3,支持TLS1.0、TLS1.1、TLS1.2 |
version |
String(3) |
Y |
接口版本3.0/3.4/3.5 当前版本3.5 |
biz_content |
String |
Y |
业务请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递 |
4.2 业务请求参数
业务参数(参数名biz_content,值为一个json格式对象,下面列表描述json对象的值):
参数 |
类型(字节长度) |
必填 |
参数说明 |
out_trade_no |
String(1,32) |
Y |
商户系统生成的订单号,须保证在商户端不重复,生成规则前8位必须为交易日期,如20220525,范围跨度支持包含当天在内的前后一天,且只能由大小写英文字母、数字、下划线及横杠组成,示例值:202205256843192280647118 |
shopdate |
String(8,8) |
N |
商户系统的交易发生日期格式yyyyMMdd 20180525 |
subject |
String(1,250) |
Y |
订单备注 |
total_amount |
Number(10,2) |
Y |
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。Number(10,2)指10位长度,2位精度 ,100 |
currency |
String(3) |
N |
默认CNY(人民币) |
seller_id |
String(1,20) |
Y |
收款商户号 |
seller_name |
String(1,50) |
N |
收款商户号对应商户名称 |
timeout_express |
String(2,6) |
Y |
设置未付款交易的超时时间,一旦超时,该笔交易就会自动被关闭,取值范围:1m~15d。m-分钟,h-小时,d-天。该参数数值不接受小数点,如1.5h,可转换为90m。注意:设置了未付款交易超时时间的情况下,若我司在限定时间内没有收到成功支付通知,则会关闭交易,关闭后该笔交易若付款方支付成功的情况下,会自动原路退款至付款方。96h |
extend_params |
String(500) |
N |
业务扩展参数,一个json字符串,order_mode订单模式,暂时可选的值为:00 代表购物车模式;seller_list参与分账的收款方信息数组,每个元素包含seller_id收款方银盛支付用户号。实时分账业务,order_mode和seller_list均不能为空,order_mode的值必须为00。示例值:样例9.1 |
extra_common_param |
String(2000) |
N |
公用回传参数 |
business_code |
String(1,10) |
Y |
业务代码 ,请联系银盛客户经理获取。注意:业务代码非固定值,不同到账方式需要传不同的业务代码 |
buyer_logon_id |
String(100) |
N |
该字段于2023-9-1已不支持使用,请使用buyer_id对接,如有疑问请咨询银盛技术支持! |
buyer_id |
String(100) |
N |
买家支付宝用户ID,和buyer_logon_id不能同时为空。buyer_id获取方法:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8ujLD6&treeId=115&articleId=104114&docType=1通过网页授权获取用户信息,同步响应结果中的user_id对应文档中的buyer_id。 |
sub_merchant |
SubMerchantInfo |
N |
二级商户信息, Json格式,暂包括merName、merShortName、merAddr、mobileNo、merNo、category、mrchntCertId 如果有值则二级商户信息都不能为空,如果没值则都不能有值 示例值:样例9.2 |
consignee_info |
ConsigeeInfo |
N |
收货人信息json格式 示例值:样例9.3 |
limit_credit_pay |
String(2) |
N |
是否限制信用卡。值为1表示禁用信用卡,0或为空表示不限制,2禁用花呗,3禁用花呗分期,4禁用所有信用支付类型 |
hb_fq_num |
String(2) |
N |
花呗分期期数,仅在支付宝支付的时候生效,目前期数支持3,6,12 |
fq_type |
String(2) |
N |
分期类型,值为00表示花呗分期,值01表示信用卡分期。不填默认为花呗分期 |
allow_repeat_pay |
String(2) |
N |
是否允许多次支付,Y:允许;N:不允许(参数为空或者Y时,默认该笔订单交易状态非成功状态时,支持选择其他支付方式继续付款, 当为N时表示该笔订单交易状态为失败状态时,不支持选择其他支付方式继续付款) |
fail_notify_url |
String(190) |
N |
失败通知地址(交易状态为失败时,银盛支付服务器主动通知商户网站里指定的页面http路径,支持多个url进行异步通知,多个url用分隔符“,”分开,格式如:url1,url2,url3)注:只有不允许重复支付的交易才会通知 |
aliGoodsDetails |
List |
N |
支付宝营销单品详情列表 |
submer_ip |
String(16) |
N |
子商户ip 112.112.112.112 |
store_id |
String(32) |
N |
商户门店编号 |
alipay_store_id |
String(32) |
N |
支付宝的店铺编号 |
operator_id |
String(28) |
N |
商户操作员编号 |
terminal_id |
String(32) |
N |
商户机具终端编号 |
business_params |
String |
N |
支付宝花呗分期专属字段 |
union_qrcode_259_params |
UnionQrCodeBaseRequest |
N |
银联259号文条码改造字段,json格式 |
buyer_realname_info |
buyer_realname_info |
N |
实名认证信息 :有证件类型、证件姓名、证件号,非必填,如果三个字段一个填写就都必填,要么就都不上送 |
gps |
GpsInformation |
N |
付款方gps信息 ,结构见4.2.6 |
payer_ip |
String |
N |
付款方ip |
extend_params_channel |
String |
N |
支付宝业务拓展参数json格式 示例值:样例9.4 |
merchant_marketing_info |
String |
N |
商户自主营销信息,json格式。coupon_id优惠券id、marketing_source_id营销来源id,示例值:merchant_marketing_info: {"coupon_id": "231", "marketing_source_id": "23232" } |
4.2.1 二级商户 SubMerchantInfo
参数 |
类型(字节长度) |
必填 |
参数说明 |
merName |
String(50) |
N |
二级商户名称,支持25个中文 |
merShortName |
String(50) |
N |
二级商户简称,支持25个中文 |
merAddr |
String(200) |
N |
二级商户地址,支持100个中文 |
telephone |
String(13) |
N |
固定电话/手机号码二选一 |
merNo |
String(32) |
N |
二级商户编号 |
category |
String(20) |
N |
类目,按附件内容输入类目编号 |
mrchntCertId |
String(15,18) |
N |
身份证号,只支持身份证格式(如果签名方式为RSA,则用DES加密,密钥为商户号前8位,不足8位在商户号前补空格;如果签名方式为SM,则用SM加密) |
4.2.2 收货人信息 ConsigeeInfo
参数 |
类型(字节长度) |
必填 |
参数说明 |
consigneeName |
String(150) |
N |
收货人姓名 |
consigneeAddr |
String(200) |
N |
收货地址 |
transportationInfo |
String(200) |
N |
物流配送信息(物流名称+订单号) |
commodityName |
String(150) |
N |
商品名称 |
commodityNumber |
String(10) |
N |
商品数量, |
4.2.3 支付宝营销 AliGoodsDetail
参数 |
类型(字节长度) |
必填 |
参数说明 |
goods_id |
String(32) |
Y |
商品编号 |
alipay_goods_id |
String(32) |
N |
支付宝定义的统一商品编号 |
goods_name |
String(256) |
Y |
营销单品名称 |
quantity |
String(10) |
Y |
营销单品数量 不超过10位的正整数 |
price |
String(12) |
Y |
营销单品单价 [0,999999999] 左闭右闭区间,小数点后最多允许两位 |
goods_category |
String(24) |
N |
营销单品类目 |
categories_tree |
String(128) |
N |
营销单品类目树 |
body |
String(1000) |
N |
营销单品描述 |
show_url |
String(400) |
N |
营销单品展示地址 |
4.2.4 银联259号文条码改造字段 UnionQrCodeBaseRequest
参数 |
类型(字节长度) |
必填 |
参数说明 |
terminal_no |
String(8) |
Y |
终端号,收单机构为商户终端分配的唯一编号 |
terminal_type |
String(2) |
Y |
终端类型(线下交易场景必填):01 自动柜员机(含 ATM 和 CDM)和多媒体自助终端、02 传统 POS、03 mPOS、04 智能 POS、05 II 型固定电话、06 云闪付终端、07 保留使用、08 手机 POS、09 刷脸付终端、10 条码支付受理终端、11 辅助受理终端、12 行业终端(公交、地铁用于指定行业的终端)、13 MIS 终端 |
serial_num |
String(50) |
O |
终端序列号,备注:终端类型为 02;03;04;05;06;08;09或10时,必须填写终端序列号 |
network_license |
String(5) |
N |
银行卡受理终端产品入网认证编号,备注:终端类型为 02;03;04;05;06;08;09或10时,终端设备如果有相关参数,建议填写 |
app_version |
String(5) |
N |
终端应用程序的版本号,备注:终端类型为 02;03;04;05;06;08;09或10时,建议填写。终端应用程序的版本号,应用程序变更应保证版本号不重复。 |
terminal_gps |
String(32) |
O |
交易设备位置信息,格式:纬度/经度,东经为正数,西经为负数;北纬为正数,南纬为负数,线下交易场景、terminal_ip和terminal_gps 二者选其一 必填 |
terminal_ip |
String(64) |
O |
商户端终端设备 IP 地址。注:如经、维度信息未上送,该字段必送。 |
encryp_rand_num |
String(10) |
N |
加密随机因子 |
secret_text |
String(16) |
N |
密文数据 |
4.2.5 购买人实名认证信息 buyer_realname_info
参数 |
类型(字节长度) |
必填 |
参数说明 |
id_no |
String |
Y |
证件号,只支持身份证格式(如果签名方式为RSA,则用DES加密,密钥为商户号前8位,不足8位在商户号前补空格;如果签名方式为SM,则用SM加密) |
id_type |
String |
Y |
证件类型,只支持身份证,枚举值:1 |
id_name |
String |
Y |
证件姓名 |
参数 |
类型 |
必填 |
参数说明 |
latitude |
Double |
N |
纬度,范围-90~90 |
longitude |
Double |
N |
经度,范围-180~180 |
5、响应参数说明
银盛支付对商户的请求数据处理完成后,会将处理的结果数据同步回执给商户。
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。
5.1 公共响应参数
参数 |
类型(字节长度) |
必填 |
参数说明 |
sign |
String |
Y |
签名字符串,Base64编码 |
ysepay_online_alijsapi_pay_response |
String |
Y |
业务响应参数的集合,最大长度不限 |
5.2 业务响应参数
参数 |
类型(字节长度) |
必填 |
参数说明 |
out_trade_no |
String(32) |
Y |
商户唯一订单号 2018012500001 |
trade_no |
String(30) |
N |
银盛支付交易流水号 |
trade_status |
String |
Y |
交易状态,成功的值: TRADE_SUCCESS 示例值:附录10.1 |
total_amount |
Number |
Y |
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。100 |
currency |
String(3) |
N |
交易币种 默认CNY |
extra_common_param |
String |
N |
商户自定义数据域,原样返回 |
jsapi_pay_info |
String |
Y |
Json格式字符串,作用于原生态的js支付时的参数 |
channel_send_sn |
String(50) |
N |
发往渠道流水号 |
channel_recv_sn |
String(50) |
N |
渠道返回流水号 |
6、服务器交易成功异步通知参数说明
银盛支付对商户的请求数据处理完成后,会将处理的结果数据通过服务器主动通知的方式通知给商户网站。这些处理结果数据就是服务器异步通知参数。
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。
参数 |
类型(字节长度) |
必填 |
参数说明 |
sign_type |
String |
Y |
签名类型,交易请求时传入的签名类型RSA/SM |
sign |
String |
Y |
签名字符串,Base64编码 |
notify_type |
String |
Y |
通知类型默认 directpay.status.sync |
notify_time |
String(19) |
Y |
发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" |
out_trade_no |
String(32) |
Y |
商户生成的订单号 |
total_amount |
Number |
N |
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
trade_no |
String(30) |
N |
银盛支付交易流水号 |
trade_status |
String |
Y |
交易目前所处的状态。成功状态的值: TRADE_SUCCESS\ |
TRADE_CLOSED 示例值:附录10.1 |
account_date |
String(10) |
N |
入账的时间,格式"yyyyMMdd" |
payer_fee |
Number |
N |
该笔订单的付款方手续费(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
payee_fee |
Number |
N |
该笔订单的收款方手续费(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
partner_fee |
Number |
N |
该笔订单的合作方手续费(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
fee |
Number |
N |
该笔订单的手续费总和(参考),单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
channel_send_sn |
String(50) |
N |
发往渠道流水号 |
paygate_no |
String(16) |
N |
支付网关编号 |
channel_recv_sn |
String(50) |
N |
渠道返回流水号 |
card_type |
String |
N |
卡类型credit:信用卡debit:借记卡 |
buyer_user_id |
String |
N |
支付宝用户Uid |
buyer_logon_id |
String |
N |
支付宝账户 |
extra_common_param |
String |
N |
公用回传参数 商户自定义数据域,原样返回 |
alipay_trx_resp_coupon_info |
String |
N |
支付宝优惠信息,版本号3.5及以上支持 |
ali_merchant_amount |
String |
N |
支付宝商家优惠金额,版本号3.5及以上支持 |
ali_platform_dis_amount |
String |
N |
支付宝平台优惠金额,版本号3.5及以上支持 |
ali_goods_details |
String |
N |
ListJSON字符串 支付宝营销单品信息,版本3.5及以上支持 |
preferential_amount |
Number |
N |
营销优惠金额 版本3.9及以支持 示例值:样例1.2 |
preferential_fee |
Number |
N |
营销优惠手续费 版本3.9及以支持 示例值:样例0.02 |
marketing_rule_json |
String |
N |
营销规则信息json 版本3.9及以支持 |
6.1 支付宝营销 GoodsDetail
参数 |
类型(字节长度) |
必填 |
参数说明 |
id |
String(64) |
Y |
记录编号,唯一标识 |
tradesn |
String(30) |
Y |
银盛交易流水 |
seq |
Integer(4) |
Y |
银盛交易流水序列号 |
createtime |
Date |
Y |
记录创建时间 |
wxpayGoodsId |
String(32) |
N |
渠道单品标识 |
goodsName |
String(256) |
N |
营销单品名称 |
goodsId |
String(32) |
Y |
营销单品标识 |
goodsRemark |
String(256) |
N |
营销单品备注 |
quantity |
NUMBER(10) |
N |
营销单品数量 |
price |
NUMBER(15,4) |
N |
营销单品价格 |
type |
String(32) |
N |
记录类型 “WXREQ”:微信单品营销请求;“WXRESP”:微信单品营销渠道响应;“ALIREQ”:支付宝单品营销请求;“ALIRESP”:支付宝单品营销渠道响应 |
discountAmount |
NUMBER(15,4) |
Y |
抵扣金额 |
goodsDetailJson |
String(3000) |
N |
type为WXREQ/ALIREQ请求类型时,为原始传入的单品营销参数JSON字符串。type为WXRESP/ALIRESP时为渠道返回的单品营销响应原始信息JSON字符串 |
7、交易失败异步通知
银盛支付对商户的请求数据处理完成后,会将处理的结果数据通过服务器主动通知的方式通知给商户网站。这些处理结果数据就是服务器异步通知参数。
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。
参数 |
类型(字节长度) |
必填 |
参数说明 |
sign_type |
String |
Y |
签名类型 RSA、SM |
sign |
String |
Y |
签名字符串,Base64编码 |
notify_type |
String |
Y |
通知类型 默认 failpay.status.sync |
notify_time |
String(19) |
Y |
发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" 2014-07-24 03:07:50 |
out_trade_no |
String(32) |
Y |
商户唯一订单号 6843192280647118 |
total_amount |
Number |
N |
该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。 |
trade_no |
String(30) |
N |
银盛交易流水号。 |
trade_status |
String |
Y |
交易目前所处的状态。成功状态的值: TRADE_SUCCESS\ |
TRADE_CLOSED 示例值:附录10.1 |
result_note |
String |
N |
交易结果描述,当交易失败时,保存错误描述 |
8、Jsapi支付
//下单完成,拿到支付串后进行jsapi支付,并唤起支付控件
<p id="result">result: </p>
<script type="application/javascript">
// 调试时可以通过在页面定义一个元素,打印信息,使用alert方法不够优雅
function log(obj) {
$("#result").append(obj).append(" ").append("<br />");
}
$(document).ready(function(){
// 页面载入完成后即唤起收银台
// 此处${tradeNO}为模板语言语法,实际调用样例类似为
tradePay("2016072621001004200000000752")
//这个值即取自上面jsapi_pay_info参数里的tradeNO的值
tradePay("${tradeNO}");
// 点击payButton按钮后唤起收银台
$("#payButton").click(function() {
tradePay("${tradeNO}");
});
// 通过jsapi关闭当前窗口,仅供参考,更多jsapi请访问
// /aod/54/104510
$("#closeButton").click(function() {
AlipayJSBridge.call('closeWebview');
});
});
// 由于js的载入是异步的,所以可以通过该方法,当AlipayJSBridgeReady事件发生后,再执行callback方法
function ready(callback) {
if (window.AlipayJSBridge) {
callback && callback();
} else {
document.addEventListener('AlipayJSBridgeReady', callback, false);
}
}
function tradePay(tradeNO) {
ready(function(){
// 通过传入交易号唤起快捷调用方式(注意tradeNO大小写严格)
AlipayJSBridge.call("tradePay", {tradeNO: tradeNO
}, function (data) {
log(JSON.stringify(data));
if ("9000" == data.resultCode) {
log("支付成功");
}
});
});
}
</script>
result.resultCode
支付结果:
9000∶ 订单支付成功;
8000∶正在处理中;
4000∶ 订单支付失败∶
6001∶用户中途取消;
6002∶网络连接出错;
99∶用户点击忘记密码快捷界面退出(onlyiOS sice9.5)
9、样例
9.1 业务扩展 extend_params
{
"cartTYpe": "00",
"order_mode": "01",
"seller_list": [{
"seller_id": "123"
}, {
"seller_id": "456"
}]
}
9.2 二级商户 sub_merchant
{
"merName": "二级商户名称",
"merShortName": "二级商户简称",
"merAddr": "二级商户地址",
"mobileNo": "二级商户服务电话",
"merNo": "二级商户编号",
"category": "类目",
"mrchntCertId": "身份证号"
}
9.3 收货人 consignee_info
{
"consigneeName": "收货人姓名",
"consigneeAddr": "收货地址",
"transportationInfo": "物流配送信息",
"commodityName": "商品名称",
"commodityNumber": "商品数量"
}
9.4 支付宝业务拓展参数extend_params_channel
{
"food_order_type": "qr_order"
}
9.5 SDK调用示例
- 银盛将与服务端交互的接口封装在开发工具包(SDK)中,开发者无需自行实现同服务端交互的复杂逻辑,直接将SDK导入自己的工程后,通过sdk示例代码实现同银盛服务端的交互。
@Test
public void alipayTest() throws Exception {
OnlineReqDataVo reqDataVo = new OnlineReqDataVo();
reqDataVo.setReqUrl("https://qrcode.ysepay.com/gateway.do");
reqDataVo.setPartnerId("hyfz_test2");
reqDataVo.setNotifyUrl("http://127.0.0.1");
reqDataVo.setPrivateKeyFilePath("D:/cer/hyfz_test2.pfx");
reqDataVo.setPrivateKeyPassword("123456");
reqDataVo.setYsPublicKeyFilePath("D:/cer/businessgate.cer");
reqDataVo.setTranType("1");
Map<String, Object> bizContent = new HashMap<>();
bizContent.put("out_trade_no", "201805256843192280647118");
bizContent.put("shopdate", "20211013");
bizContent.put("subject", "支付宝生活服务窗支付接口测试");
bizContent.put("total_amount", "2.99");
bizContent.put("currency", "CNY");
bizContent.put("seller_id", "hyfz_test2");
bizContent.put("seller_name", "银盛支付服务股份有限公司行业发展部");
bizContent.put("timeout_express","96h");
bizContent.put("extend_params","{\"cartTYpe\": \"00\",\"order_mode\": \"01\",\"seller_list\": [{\"seller_id\": \"123\"},{\"seller_id\": \"456\"}]}");
bizContent.put("extra_common_param", "extra_common_param");
bizContent.put("business_code", "00510080");
bizContent.put("buyer_logon_id", "233423423");
bizContent.put("buyer_id", "23342342233");
JSONObject subMerchantInfoJson = new JSONObject();
subMerchantInfoJson.put("merName","");
subMerchantInfoJson.put("merShortName","");
subMerchantInfoJson.put("merAddr","");
subMerchantInfoJson.put("telephone","");
subMerchantInfoJson.put("merNo","");
subMerchantInfoJson.put("category","");
subMerchantInfoJson.put("mrchntCertId","");
bizContent.put("sub_merchant",subMerchantInfoJson);
JSONObject consigneeInfoJson = new JSONObject();
subMerchantInfoJson.put("consigneeName","");
subMerchantInfoJson.put("consigneeAddr","");
subMerchantInfoJson.put("transportationInfo","");
subMerchantInfoJson.put("commodityName","");
subMerchantInfoJson.put("commodityNumber","");
bizContent.put("consignee_info",consigneeInfoJson);
bizContent.put("province",null);
bizContent.put("city",null);
bizContent.put("limit_credit_pay","0");
bizContent.put("hb_fq_num","6");
bizContent.put("allow_repeat_pay","N");
bizContent.put("fail_notify_url","http://127.0.0.1");
JSONArray aliGoodsDetails = new JSONArray();
JSONObject aliGoodsDetail = new JSONObject();
aliGoodsDetail.put("goods_id","Shouji_abcef_001-001");
aliGoodsDetail.put("alipay_goods_id","1001");
aliGoodsDetail.put("goods_name","手机");
aliGoodsDetail.put("quantity",1000);
aliGoodsDetail.put("price",100.20);
aliGoodsDetail.put("goods_category","");
aliGoodsDetail.put("categories_tree","");
aliGoodsDetail.put("body","");
aliGoodsDetail.put("show_url","");
aliGoodsDetails.add(aliGoodsDetail);
bizContent.put("aliGoodsDetails",aliGoodsDetails);
bizContent.put("submer_ip","112.112.112.112");
reqDataVo.setParamData(bizContent);
String result = null;
try{
System.out.println("支付宝生活服务窗支付接口-调用sdk接口alipay请求入参为:"+ JSONObject.toJSONString(reqDataVo));
result = ScanCodePayApi.alipay(reqDataVo);
}catch (Exception e){
System.out.println("支付宝生活服务窗支付接口-失败:"+e.getCause().getMessage());
e.printStackTrace();
}
System.out.println("支付宝生活服务窗支付接口-调用sdk接口alipay返回结果为:"+result);
}
9.5 API接口代码示例
- 需要开发者自己封装调用逻辑,实现调用银盛api接口同银盛服务端交互,该示例没有加签验签及发送http请求代码,需自行下载demo查看。
public static void main(String[] args) {
Map<String,String> mapData = new HashMap<>();
mapData.put("method", MethodConstants.Order.ALIJSAPI_PAY);
mapData.put("partner_id","hyfz_test2");
mapData.put("timestamp", DateUtil.getDateNow());
mapData.put("charset","utf-8");
mapData.put("sign_type","RSA");
mapData.put("notify_url","http://127.0.0.1");
mapData.put("version","3.0");
JSONObject json = new JSONObject();
json.put("out_trade_no", SerialGenerator.getOrder());
json.put("shopdate",DateUtil.getDateNowYmd());
json.put("subject","支付宝生活服务窗支付测试");
json.put("timeout_express","96h");
json.put("total_amount","0.01");
json.put("currency","CNY");
json.put("seller_id","hyfz_test2");
json.put("seller_name","银盛支付服务股份有限公司行业发展部");
json.put("business_code","01000010");
json.put("buyer_logon_id","19967567859");
mapData.put("biz_content",json.toString());
try{
log.info("待签名参数:"+ CommonUtil.mapToString(mapData));
String sign = YsPaySignUtils.sign(mapData);
mapData.put("sign",sign);
} catch (Exception e){
log.info("签名失败:"+e);
}
log.info("请求参数:"+CommonUtil.mapToString(mapData));
String result = HttpRequest.sendPost("https://qrcode.ysepay.com/gateway.do",CommonUtil.mapToString(mapData));
log.info("接口回执:"+result);
if(StringUtil.isBlank(result) ||null == result){
log.info("接口返回结果为空!");
}
JSONObject resultJson = JSONObject.parseObject(result, Feature.OrderedField);
String resultContent = resultJson.getString("ysepay_online_alijsapi_pay_response");
String resultSign = resultJson.getString("sign");
boolean resultVerify = false;
try{
resultVerify = YsPaySignUtils.resultVerify1(resultContent,resultSign);
} catch (Exception e){
log.info("验签异常:"+e);
}
if(!resultVerify){
log.info("接口验签失败");
}
}
10.附录
10.1 交易状态
枚举名称 |
枚举说明 |
WAIT_BUYER_PAY |
交易创建,等待买家付款。 |
TRADE_CLOSED |
在指定时间段内未支付时关闭的交易;客户主动关闭订单。 |
TRADE_SUCCESS |
交易成功,且可对该交易做操作,如:多级分润、退款等。 |
TRADE_PART_REFUND |
部分退款成功。 |
TRADE_ALL_REFUND |
全部退款成功。 |
TRADE_FAILD |
交易失败 |
10.2 支付网关编号
支付渠道代码 |
支付渠道 |
900000001 |
银联-支付宝 |
9000010 |
银联-微信 |
10810001 |
银联扫码-银联云闪付 |
10010001 |
网联-微信 |
10000012 |
网联-支付宝 |