好久没写博客了……今天一时兴起,准备把最近做的东西记录下来。以后要重拾写博客的好习惯。手动狗头,今天先来介绍下最近做过的支付宝小程序接入轻会员的流程。

什么是轻会员??

废话不多说,直接上官方的介绍:

“花芝轻会员”是一款轻量级的差异化会员营销工具,集成了花呗和芝麻信用两大能力。商家可让用户“先享受权益,后支付会员费”,体验作为轻会员和普通会员之间的差异化服务。使用户切实享受会员带来的实惠、打消资金安全和消费陷阱顾虑;使商家会员经营更简单,促进会员留存和复购。

支付宝小程序接入轻会员步骤

接入轻会员,主要需要三个步骤:

签约轻会员

参考《轻会员商家接入指南》

完成轻会员模板配置

参考《轻会员商家接入指南》

将轻会员代码插入到小程序中

在模板配置完成后,我们可以获得模板的templateId,所以在我们代码中,只需要唤起轻会员插件即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const { config } = this.state
my.navigateToMiniService({
serviceId: '2019072365974237', // 插件id,固定值勿改
servicePage: 'pages/hz-enjoy/main/index', // 插件页面地址,固定值勿改
extraData: {
'alipay.huabei.hz-enjoy.templateId': config.templateId,
'alipay.huabei.hz-enjoy.partnerId': config.partnerId,
},
success: () => {
navigateUtil.toHome()
},
fail: (res) => {
Taro.showToast(res.data)
},
complete: () => {
navigateUtil.toHome()
},
})

代码中的templateId即是我们在第二步中配置模板生成的ID, partnerId为商家支付宝Id(不是用户的Id)。

轻会员结算成功通知商户

轻会员在页面上用户是无法感知的,优惠金额只有在用户结算时才显示在支付宝收银台上。为了方便获取优惠金额,用户支付完成后,异步获取优惠金额也是一个很重要的步骤。
支付宝考虑到这一点,也提供了相应的API。主要用于支付完成后异步通知商户信息。
这里主要给出两种实现方式:

  1. Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
AlipayClient alipayClient = new DefaultAlipayClient("https://openasyncapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayPcreditHuabeiAuthSettleSuccessRequest request = new AlipayPcreditHuabeiAuthSettleSuccessRequest();
request.setBizContent("{" +
"\"auth_opt_id\":\"2018041721001001230571065758\"," +
"\"trade_no\":\"2013112011001004330000121536\"," +
"\"agreement_no\":\"20170502000610755993\"," +
"\"agreement_status\":\"N\"," +
"\"out_request_no\":\"8077735255938032\"," +
"\"auth_scene\":\"EASY_MEMBER\"," +
"\"rest_freeze_amount\":\"0.00\"," +
"\"pay_amount\":\"3.00\"," +
"\"alipay_user_id\":\"2088101117955611\"," +
"\"out_seller_id\":\"123023415243\"," +
"\"gmt_trans\":\"2018-03-15 11:23:04\"," +
"\"addition_operate_type\":\"SIGN_OFF\"," +
"\"addition_operate_result\":\"Y\"" +
" }");
AlipayPcreditHuabeiAuthSettleSuccessResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
  1. HTTP请求
1
https://openasyncapi.alipay.com/gateway.do?timestamp=2013-01-01 08:08:08&method=alipay.pcredit.huabei.auth.settle.success&app_id=17043&sign_type=RSA2&sign=ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE&version=1.0&charset=GBK&biz_content={"pay_amount":"3.00","alipay_user_id":"2088101117955611","rest_freeze_amount":"0.00","out_seller_id":"123023415243","auth_opt_id":"2018041721001001230571065758","addition_operate_result":"Y","agreement_no":"20170502000610755993","agreement_status":"N","gmt_trans":"2018-03-15 11:23:04","trade_no":"2013112011001004330000121536","addition_operate_type":"SIGN_OFF","out_request_no":"8077735255938032","auth_scene":"EASY_MEMBER"}

公共请求参数:

参数类型是否必填最大长度描述
notify_idString50通知Id
utc_timestampString13消息发送时的服务端时间
msg_methodString100消息接口名称
app_idString20消息接受方的应用id
msg_typeString5消息类型。目前支持类型:sys:系统消息;usr,用户消息;app,应用消息
msg_uidString20消息归属的商户支付宝uid。用户消息和应用消息时非空
msg_app_idString20消息归属方的应用id。应用消息时非空
versionString5版本号(1.1版本为标准消息)
biz_contentString消息报文
signString签名
sign_typeString10签名类型
encrypt_typeString10加密算法
charsetString10编码集,该字符集为验签和解密所需要的字符集
notify_typeString20通知类型,1.1接口没有该参数
notify_timeString19通知时间
auth_app_idString201.1没有此参数授权方的应用id

消息的基本格式:

参数类型是否必填最大长度描述
auth_opt_idString64支付宝侧授权操作单据id
trade_noString64支付宝交易号,当支付金额>0时才会有支付宝交易号2018112011001004330000121536,否则就为空
agreement_noString64支付宝系统中用以唯一标识用户签约记录的编号
agreement_statusString10协议状态。Y表示状态有效,P表示失效中,N表示状态失效
out_request_noString64商户本次操作的请求流水号,用于标识请求流水的唯一性,不能包含除中文、英文、数字以外的字符,需要保证在商户端不重复
auth_sceneString64花芝轻会员签约场景,商户和支付宝签约时确定,商户接入时需要咨询技术支持。
rest_freeze_amountString16完成本次操作时,用户资金池余额快照。仅作提示用,请勿用于核对,并发情况下数值有可能不准确。两位小数,单位元
pay_amountString16支付金额,单位元
alipay_user_idString128买家在支付宝的用户id
out_seller_idString64商户的支付宝sellerId
gmt_transString20业务成功时间
addition_operate_typeString20支付完成后的协议追加动作,比如解约SIGN_OFF
addition_operate_resultString20表示此次业务是否成功,Y:成功,N:失败

以上介绍了请求的一些基本参数,接下来就只需要在支付宝开放平台消息服务中设置消息模板,具体操作可参考支付宝开放平台消息服务 中的From蚂蚁消息服务使用。

待续…….