关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言
支付产品千千万,作为领军产品的当属微信和支付宝。支付产品的接入常用的场景越来越多,同一个产品,又分很多场景的支付场景。以支付宝为例,支付的产品包括当面付、APP支付、手机网站支付等,每一种产品都对应不同的支付场景。

刚好这段时间因为业务需要接入支付宝的H5支付,整理一下分享给大家。
02 H5支付介绍
2.1 产品介绍

H5支付在支付宝产品内部叫手机网站支付,是支付宝面向移动端网页场景提供的支付解决方案。用户在使用手机浏览器访问商户网页时,可通过调用支付宝客户端或跳转到支付宝网页完成支付。相比传统的PC端支付,H5支付更适合移动端用户,提供更流畅的支付体验。
简单来讲就是再没有支付宝生态的环境下的一种支付方式,也叫支付宝外支付。
2.2 角色介绍
支付宝的开放业务存在三种角色类型:
- **开发者角色:**需要开发者账号,一般登录支付宝 开放平台 完成应用开发相关操作。
- **商家角色:**需要商家账号,一般登录 商家服务平台 开通支付服务并完成商家经营相关操作。
- **服务商角色:**需要服务商账号,一般登录服务商平台 完成协助商家开通产品等操作。
作为公司直连产品,主要就是两个角色:开发者和商家
同时不同的角色需要进入不同的平台设置。商家也就是收款方,一般就是公司需要申请收款账号。开发者也就是开发人员需要配置API属性,使用的账号可以直接使用商家的账号即可。
03 H5支付接入-开放平台
H5支付的接入官方文档介绍的相当详细,但是开发平台和商家平台来回跳可能会将人绕晕,我们将逐步拆解。

官方文档贴心的提供了检测小工具,如上图。
官方接入文档:opendocs.alipay.com/open/203/10...
3.1 开放平台创建应用

首先需要开发者在开放平台创建 网页/移动应用。

创建完成之后等待官方审核,一般一个工作日之内完成审核。
3.2 开放平台配置应用

我们需要关注的配置有接口加签方式、接口内容加密方式以及openid配置管理。
接口加签方式
接口加签必填选项,用于防止数据篡改,保障应用和支付宝交互的安全性
需要接入官方秘钥工具生成即可。

官方统一工具地址:opendocs.alipay.com/common/02ki...

最终我们生成的秘钥文件包括:应用公钥和私钥

还有一个支付宝公钥:

其中支付宝公钥和应用私钥参与代码逻辑。
接口内容加密方式
这个选填项,用于加 / 解密 OpenAPI bizContent 报文内容,可大幅提升接口内容传输的安全性。
openid配置管理
openid配置管理是新版默认开启的参数。低版本支付宝服务端 SDK 不支持获取 openid,在使用 openid 开发接入前,请先确保使用的 SDK 符合版本要求:
| 开发语言 | SDK版本要求 |
|---|---|
| Java | 4.35.37 及以上的版本 |
| .NET | 4.7.144 及以上的版本 |
| PHP | 4.19.30 及以上的版本 |
| PYTHON | 3.6.528 及以上的版本 |
否则会出现不支持的提示:

到这里,开发平台基本就配置好了。
3.3 应用APPID

这里的APPID需要和商家后台绑定。
3.4 开放平台
开放平台是独立的平台。
开放平台地址:openhome.alipay.com/

04 H5支付接入-商家平台
商家平台地址:b.alipay.com/page/home

4.1 绑定APPID
登录 商家平台 > 账号中心 > 绑定 > APPID绑定 ,点击 添加绑定。

然后添加绑定关系:

这里的APPID就是开放平台的APPID
4.2 开通产品

这里的我已经开通过了,没有开通话需要开通支付产品。开通过程中,如果网站的主体和商家后台的主体不一致需要授权。授权函如下图:

到这里就完成了支付宝H5支付的所有配置,下来就到了编码环节了。
05 Java代码
Java代码是非常简单的,只需要复制官方文档的代码即可,使用适合自己的参数即可,这里不再赘述。
代码示例地址:opendocs.alipay.com/open/29ae8c...

这里简单的说以配置的代码:
java
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;
}
这里的配置是初始化支付宝客户端需要的参数,其中privateKey和alipayPublicKey就是开放平台生成的应用私钥和应用公钥。
这里的APPID就是应用的APPID。
06 小结
对接下来无论支付宝和微信,都需要一个载体去连接商户号(商家后台),然后通过关联的方式打通支付渠道。
支付宝的产品中有一个指定买家付款的功能,可以杜绝三方付款。而微信只能用到指定的行业如金融、保险等,需要额外申请。