近期在做支付宝小程序的时候,需要接入芝麻信用分,用于用户的免押金操作流程。
查询相关文档以及与芝麻客服沟通后,得出以下结论:
1、小程序只能调用芝麻信用分普惠版,普惠版无法获取用户具体的信用分。
2、芝麻信用分普惠版无需用户授权,但一般情况下我们都会让用户授权。(像ofo,哈罗单车,永安行等等)
3、用户一旦授权,平台将无从得知用户是否已经取消了授权。(原因就是第二步)
我们平台采用授权机制,具体开发流程如下
1、小程序调用获取会员信新接口,获取 authCode,然后传给服务器。
具体接口可以参考 https://docs.alipay.com/mini/introduce/auth
2、服务器拿到 authCode,调用 alipay.system.oauth.token 接口获取 用户在支付宝商户下的 userId
代码如下:
// 获取用户的userId
AlipayClient alipayClient = getRsa2Client();
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code");
request.setCode(auth_code);
UserAuthonResBO resp = new UserAuthonResBO();
try {
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
if(response.isSuccess()){
resp = goMaYiauthorization(response.getUserId(),zhimaScore);
}else {
resp.setIsSuccess(false);
resp.setErrorCode(response.getSubCode());
resp.setErrorMessage(response.getSubMsg());
}
} catch (AlipayApiException e) {
resp.setIsSuccess(false);
resp.setErrorMessage(e.getMessage());
}
return resp;
}
//根据 userId 查询用户的支付分是否大于设置值
public static UserAuthonResBO goMaYiauthorization(String userId,int score){
ZhimaCreditScoreBriefGetRequest request = new ZhimaCreditScoreBriefGetRequest();
String transaction_id = getTransactinId();
SesameRequest sesame = new SesameRequest();
sesame.setTransaction_id(transaction_id); //64
sesame.setProduct_code("w1010100000000002733");//固定值
sesame.setCert_type("ALIPAY_USER_ID"); // ALIPAY_USER_ID 支付宝uid
sesame.setCert_no(userId);
sesame.setAdmittance_score(score);
request.setBizContent(JSON.toJSONString(sesame));
UserAuthonResBO resp = new UserAuthonResBO();
resp.setOpenId(userId);
resp.setTransactionId(transaction_id);
AlipayClient alipayClient = getRsa2Client();
try {
ZhimaCreditScoreBriefGetResponse response = alipayClient.execute(request);
logger.info(response.getBody());
if(response.isSuccess()){
switch (response.getIsAdmittance()) {
case "Y":
resp.setIsSuccess(true);
break;
case "N":
resp.setIsSuccess(false);
resp.setErrorMessage("用户的芝麻分小于准入分数");
break;
case "N/A":
resp.setIsSuccess(false);
resp.setErrorMessage("无法评估,例如用户未开通芝麻信用,或芝麻采集的信息不足以评估该用户的信用");
break;
default:
break;
}
}else {
resp.setIsSuccess(false);
resp.setErrorCode(response.getSubCode());
resp.setErrorMessage(response.getSubMsg());
}
} catch (AlipayApiException e) {
resp.setIsSuccess(false);
resp.setErrorMessage(e.getMessage());
}
return resp;
}
public static AlipayClient getRsa2Client(){
AlipayClient alipayClient = new DefaultAlipayClient(xcx_url,
xcx_appId, xcx_privateKey,
"json",
"GBK",
xcx_alipayPulicKey,
"RSA2");
return alipayClient;
}
本文介绍了在支付宝小程序中如何接入芝麻信用分,以实现免押金操作流程。主要内容包括:小程序只能调用芝麻信用分普惠版,用户授权机制的必要性,以及详细的技术实现步骤,如获取authCode,通过alipay.system.oauth.token接口获取userId,以及使用ZhimaCreditScoreBriefGetRequest检查用户信用分是否达标。
3468

被折叠的 条评论
为什么被折叠?



