文章目录

  • 支付宝当面付(条码支付)
  • 一.账号初始配置
  • 1.身份选择
  • 2.完善信息和拓展身份
  • 2.1完善信息
  • 2.2拓展身份
  • 二.沙箱环境应用配置
  • 1. 沙箱应用
  • 1.1必看部分
  • 1.2选看部分
  • 2. 沙箱账号
  • 3. 沙箱工具
  • 三.正式环境应用创建流程及配置
  • 1. 创建应用指南
  • 2. 选择应用类型
  • 3. 创建应用
  • 四.代码配置流程
  • 1. 准备材料及说明
  • 2. 代码配置
  • 2.1项目结构
  • 2.2集成至项目步骤
  • 2.3配置文件说明
  • 2.4签名和验签


支付宝当面付(条码支付)


一.账号初始配置

1.身份选择

登录蚂蚁金服开放平台之后,需要选择入驻身份,身份确定了你要开发哪种应用,开发自研应用(只供自己使用)就选择自研开发者。

JAVA绑定支付宝 java对接支付宝支付_后端

2.完善信息和拓展身份

2.1完善信息

  1. 进入主界面后,点击右上角账户信息,进入账户管理/合作伙伴管理界面。
  2. 在账户管理/合作伙伴管理界面完善和修改账户信息。
  3. 然后签署协议

2.2拓展身份

在账户管理/合作伙伴管理界面下方有角色身份一栏,如需要开发其他种类应用,可以点击“立即扩展”按钮进行身份扩展。

JAVA绑定支付宝 java对接支付宝支付_java_02

二.沙箱环境应用配置

点击开发者中心-研发服务-沙箱环境,进入沙箱环境页面,沙箱环境有三个信息,沙箱应用,沙箱账号,沙箱工具。

JAVA绑定支付宝 java对接支付宝支付_jar_03

1. 沙箱应用

进入沙箱环境页面后,可以看到系统已经自动为你创建一个应用。

1.1必看部分

JAVA绑定支付宝 java对接支付宝支付_java_04


参数介绍

  1. APPID:沙箱环境自动生成,且唯一,必须与代码中APPID一致。
  2. 支付宝网关:沙箱环境自动生成,必须与代码一致,如果应用上线,代码中该地址配置为https://openapi.alipay.com/gateway.do,即去除地址中的dev字段。
  3. RSA2(SHA256)密钥:必填,如未配置,该参数后只显示“设置应用公钥”,点击下载签名验签工具,下载解压后如图所示。
  4. JAVA绑定支付宝 java对接支付宝支付_后端_05

  5. 进入文件夹,运行bat后缀程序。
  6. JAVA绑定支付宝 java对接支付宝支付_JAVA绑定支付宝_06

  7. 如下图所示,弹出工具框,根据开发语言选择密钥格式,因为目前新建应用只支持RSA2签名方式,所以密钥长度选择2048方可生效。
  8. JAVA绑定支付宝 java对接支付宝支付_jar_07

1.2选看部分

JAVA绑定支付宝 java对接支付宝支付_java_08

  1. 应用网关:选填,用于接收支付宝异步通知,例如口碑开店中,需要配置此网关来接收开发者门店被动通知,一旦填入之后,该项就不能为空了,一般不需要配置。
  2. 授权回调地址:选填,第三方授权或用户信息授权后回调地址。授权链接中配置的redirect_uri的值必须与此值保持一致,一旦填入之后,该项就不能为空了,一般不需要配置。
  3. RSA(SHA1)密钥:选填,推荐使用RSA2(SHA256)密钥,如果在上方配置已经配置过,该处不需要配置。
  4. AES密钥:选填,对请求的报文内容进行加密,提高安全性,如果使用了该密钥,还需要在代码中对响应内容进行解密处理。

2. 沙箱账号

主要就是商家账号和买家账号,测试可以使用买家账号付款,也可以进行充值等操作。买家账号只能用于支付宝沙箱环境app。

JAVA绑定支付宝 java对接支付宝支付_后端_09

3. 沙箱工具

JAVA绑定支付宝 java对接支付宝支付_jar_10

三.正式环境应用创建流程及配置

可参考官方文档https://docs.open.alipay.com/194/105072/中条码支付接入指引。

1. 创建应用指南

开发者使用支付宝账号登录开放平台(需实名认证的支付宝账号),进入开发者中心。

JAVA绑定支付宝 java对接支付宝支付_java_11

2. 选择应用类型

  1. 应用类型分为自研发和第三方研发两种,根据自己业务需求选择应用类型,企业自研发请选择网页移动应用,小程序,生活号。
  2. 为企业或商户代开发,请选择第三方应用,上线后获取商户授权。

3. 创建应用

  1. 从开发者中心首页创建。
  2. JAVA绑定支付宝 java对接支付宝支付_后端_12

  3. 也可进入应用列表创建,比如创建网页应用。
  4. JAVA绑定支付宝 java对接支付宝支付_支付宝_13

  5. 填写应用基础信息。
    使用场景:第三方应用服务于商户,自用型应用是为自己或自己的公司开发应用
  6. JAVA绑定支付宝 java对接支付宝支付_jar_14

  7. 应用图标最好自己做,以防与他人图标重复,导致审核不通过,官方说明一个月只能有两次审核机会。在下方添加应用需要开发的功能。
  8. JAVA绑定支付宝 java对接支付宝支付_jar_15

  9. 配置密钥,该密钥的生成方式与沙箱环境的生成方式一致,通过点击设置应用公钥,下载工具进行生成即可。
  10. 应用网关:选填,用于接收支付宝异步通知,例如口碑开店中,需要配置此网关来接收 开发者门店被动通知。
  11. 授权回调地址:选填,第三方授权或用户信息授权后回调地址。
  12. JAVA绑定支付宝 java对接支付宝支付_java_16

  13. 下方为本地生成密钥效果图
  14. JAVA绑定支付宝 java对接支付宝支付_支付宝_17

  15. 待审核通过后,用户即可上线。当面付功能需要进行签约,签约完成后,待审核通过,应用投入使用。
  16. JAVA绑定支付宝 java对接支付宝支付_jar_18

四.代码配置流程

1. 准备材料及说明

1) SDK及各种官方支付Demo下载

2) github资源(适用于当面付)

2. 代码配置

以开发项目中用到的当面付demo为例。

2.1项目结构

当面付2.0demo代码结构TradePayDemo ###

src
 `-- main
     |-- java
     |   `-- com
     |       `-- alipay
     |           `-- demo
     |               `-- trade
     |                   `-- Main.java  ## 当面付2.0调用范例 ##
     |-- lib  依赖类库
     |   |-- alipay-sdk-java20150625220051.jar
     |   |-- alipay-trade-sdk.jar  TradePaySDK创建的lib
     |   |-- commons-codec-1.10.jar
     |   |-- commons-configuration-1.10.jar
     |   |-- commons-lang-2.6.jar
     |   |-- commons-logging-1.1.1.jar
     |   |-- core-2.1.jar
     |   |-- gson-2.3.1.jar
     |   `-- hamcrest-core-1.3.jar
     `-- resources

2.2集成至项目步骤

集成至商户系统步骤如下:
1) 拷贝java目录下的Main.java至系统商源代码目录。

2) 将lib目录下所有jar文件添加至系统商lib目录。

3) 拷贝resources目录下的配置文件至系统商classpath根目录。

4) 在系统商项目中运行Main方法,确认集成无误。

5) 系统商使用main方法中的调用样例进行商户端系统开发。

2.3配置文件说明

所有重要信息都在zfbinfo.properties配置文件中配置。如图。

JAVA绑定支付宝 java对接支付宝支付_java_19

2.4签名和验签

1)自定义接口,获取http请求中的参数,进行参数拆分与拼接。

2)扫码支付需要进行异步验签,验签成功返回success,支付宝才能够确认为该订单支付成功。

3)条码支付不需要进行异步验签,同步方法中已自动进行验签。

4)官方验签说明文档:https://docs.open.alipay.com/291/105974

5)以下代码是官方提供的验签方法

// 获取支付宝POST过来反馈信息
Map<String, String> params = new HashMap<String, String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
	String name = (String) iter.next();
	String[] values = (String[]) requestParams.get(name);
	String valueStr = "";
	for (int i = 0; i < values.length; i++) {
		valueStr = (i == values.length - 1) ? valueStr + values[i]
				: valueStr + values[i] + ",";
	}
	// 乱码解决,这段代码在出现乱码时使用。
	// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
	params.put(name, valueStr);
}
// 切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
// boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String
// publicKey, String charset, String sign_type)
try {
	boolean flag = AlipaySignature.rsaCheckV1(params,
			prop.getProperty("alipay_public_key"), "UTF-8", "RSA2");
	if (flag) {
		return "success";
	}
} catch (AlipayApiException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
return "false";