支付宝小程序 - 基于芝麻信用分免押金操作流程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiang_6119/article/details/79915320

近期在做支付宝小程序的时候,需要接入芝麻信用分,用于用户的免押金操作流程。

 查询相关文档以及与芝麻客服沟通后,得出以下结论:

  1、小程序只能调用芝麻信用分普惠版,普惠版无法获取用户具体的信用分。

  2、芝麻信用分普惠版无需用户授权,但一般情况下我们都会让用户授权。(像ofo,哈罗单车,永安行等等)

  3、用户一旦授权,平台将无从得知用户是否已经取消了授权。(原因就是第二步)


我们平台采用授权机制,具体开发流程如下


1、小程序调用获取会员信新接口,获取 authCode,然后传给服务器。

    具体接口可以参考 https://docs.alipay.com/mini/introduce/auth

2、服务器拿到 authCode,调用 alipay.system.oauth.token 接口获取 用户在支付宝商户下的 userId

代码如下:

    // 获取用户的userId

    public static UserAuthonResBO authorizationByMayi(String auth_code,int zhimaScore){
        
        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;

    }



展开阅读全文

没有更多推荐了,返回首页