1.貌似好久没写文章了,今天来记录下最近用支付宝SDK获取芝麻信用分数的过程,以及踩过的坑。
2.个人感觉接芝麻信用分数时还是很简单的,基本都是服务端的任务,我们这边只需要将从支付宝授权获取的auth_code传给服务端,剩下的就是服务器的事了。但是还是有些小坑需要记录。
3.如果以后需要做支付宝登陆的,可以看这里,还是很详细的Android集成支付宝第三方登录
4.其实看官方的Demo也是很好的
踩坑一5.当我把官方Demo下下来,配好APPID,PID,RSA2_PRIVATE之后,直接运行Demo直接蹦了,我就懵了,官方Demo居然会有问题,好吧,通过调试,定位是空指针
StringoriSignSignUtils.sign(authInfo.toString(),rsaKey,rsa2);6.这里返回了null,无语了,通过网上查找问题,需要对其中封装好的方法修改
publicstaticStringsign(Stringcontent,StringprivateKey,booleanrsa2){try{PKCS8EncodedKeySpecpriPKCS8newPKCS8EncodedKeySpec(Base64.decode(privateKey));//后面需要下个"BC"参数KeyFactorykeyfKeyFactory.getInstance(ALGORITHM,"BC");PrivateKeypriKeykeyf.generatePrivate(priPKCS8);java.security.Signaturesignaturejava.security.Signature.getInstance(getAlgorithms(rsa2));signature.initSign(priKey);signature.update(content.getBytes(DEFAULT_CHARSET));byte[]signedsignature.sign();returnBase64.encode(signed);}catch(Exceptione){e.printStackTrace();}returnnull;}7.修改之后就不会返回null。
8.然后就可以通过将签名之后的参数传给AuthTask的authV2授权,授权成功之后就可以获取auth_code,然后传给服务器。
踩坑二9.我从支付宝获取的auth_code传给服务器,服务器居然不能用,好吧,尴尬的我本来想去问支付宝技术人员的,但是后台人员说可以修改scope的value为auth_zhima,当我修改之后居然真的成功了,好吧,支付宝文档上居然没有记录,这文档真心烂。。。。
publicstaticMapString,StringbuildAuthInfoMap(Stringpid,Stringapp_id,Stringtarget_id,booleanrsa2){MapString,StringkeyValuesnewHashMapString,String();//商户签约拿到的app_id,如:2013081700024223keyValues.put("app_id",app_id);//商户签约拿到的pid,如:2088102123816631keyValues.put("pid",pid);//服务接口名称,固定值keyValues.put("apiname","com.alipay.account.auth");//商户类型标识,固定值keyValues.put("app_name","mc");//业务类型,固定值keyValues.put("biz_type","openservice");//产品码,固定值keyValues.put("product_id","APP_FAST_LOGIN");//修改这里//授权范围,固定值keyValues.put("scope","auth_zhima");//商户唯一标识,如:kkkkk091125keyValues.put("target_id",target_id);//授权类型,固定值keyValues.put("auth_type","AUTHACCOUNT");//签名类型keyValues.put("sign_type",rsa2?"RSA2":"RSA");returnkeyValues;}10.注意:支付宝的芝麻信用分数获取和支付公用的一套SDK,并且授权用到的sign,需要从服务器获取,如果直接在客户端生成那是不安全的。
获取分数的部分代码publicclassZhiMaUtil{privatestaticfinalintSDK_AUTH_Cacel-1;privatestaticfinalintSDK_AUTH_Fail0;privatestaticfinalintSDK_AUTH_Success1;privateContextmContext;privateCallbackmCallback;privateStringtoken;publicZhiMaUtil(Contextcontext){this.mContextcontext;}@SuppressLint("HandlerLeak")privateHandlermHandlernewHandler(){@Override@SuppressWarnings("unused")publicvoidhandleMessage(Messagemsg){switch(msg.what){caseSDK_AUTH_Cacel:{mCallback.getScoreFailed("用户取消授权");break;}caseSDK_AUTH_Fail:{mCallback.getScoreFailed("授权失败");break;}caseSDK_AUTH_Success:{AuthResultauthResultnewAuthResult((MapString,String)msg.obj,true);getMineService().getZmScore(token,authResult.getAuthCode()).enqueue(newretrofit2.CallbackBaseBean(){@OverridepublicvoidonResponse(CallBaseBeancall,ResponseBaseBeanresponse){if(response.isSuccessful()response.body()!null){BaseBeanbaseBeanresponse.body();mCallback.getScoreSuccess(baseBean.getData(),"获取分数成功");}}@OverridepublicvoidonFailure(CallBaseBeancall,Throwablet){mCallback.getScoreFailed("获取分数失败");circleProgressDialog.dismiss();}});}default:break;}}};publicvoidzhiMaAuthTask(Callbackcallback){if(callbacknull){thrownewRuntimeException("callbackcannotnull!!");}mCallbackcallback;token"Bearer"+Preferences.getInstance().getAccessToken(mContext);getMineService().getAuthSign(token).enqueue(newretrofit2.CallbackBaseBean(){@OverridepublicvoidonResponse(CallBaseBeancall,finalResponseBaseBeanresponse){if(response.isSuccessful()response.body().getErrcode()0response.body()!null){BaseBeanbodyresponse.body();MapString,StringauthInfoMapOrderInfoUtil2_0.buildAuthInfoMap("你的pid","你的app_id",String.valueOf(System.currentTimeMillis()),true);StringinfoOrderInfoUtil2_0.buildOrderParam(authInfoMap);finalStringauthInfoinfo+""+body.getData();RunnableauthRunnablenewRunnable(){@Overridepublicvoidrun(){AuthTaskauthTasknewAuthTask((Activity)mContext);//调用授权接口,获取授权结果MapString,StringresultauthTask.authV2(authInfo,true);AuthResultauthResultnewAuthResult(result,true);StringresultStatusauthResult.getResultStatus();//授权成功if(TextUtils.equals(resultStatus,"9000")TextUtils.equals(authResult.getResultCode(),"200")){MessagemsgnewMessage();msg.objresult;msg.whatSDK_AUTH_Success;mHandler.sendMessage(msg);}elseif(TextUtils.equals(resultStatus,"6001")){MessagemsgnewMessage();msg.whatSDK_AUTH_Cacel;mHandler.sendMessage(msg);}else{MessagemsgnewMessage();msg.whatSDK_AUTH_Fail;mHandler.sendMessage(msg);}}};//必须异步调用ThreadauthThreadnewThread(authRunnable);authThread.start();}elseif(response.body()!null){LljApplication.showToastShort(response.body().getErrmsg());}}@OverridepublicvoidonFailure(CallBaseBeancall,Throwablet){mCallback.getScoreFailed("获取分数失败");}});}publicinterfaceCallback{voidgetScoreSuccess(Stringscore,Stringmsg);voidgetScoreFailed(Stringmsg);}11.我们需要拷贝Demo里面的AuthResult,Base64,OrderInfoUtil2_0,SignUtils四个封装好的类。
12.上面代码是个工具类,功能还是很简单的,主要步骤如下:1.获取服务器的sign,拼接客户端生成的info2.通过拼接的参数,调用支付宝的SDK授权处理3.获取auth_code,传给服务器获取分数4.成功之后通过回调,传给ui显示
13.OK,芝麻信用分数获取成功。
支付宝授权获取芝麻信用分数-芝麻小程序-小程序码在线生成
浏览量:6983
时间:
来源:narkang
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。
最新资讯
-

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。 -

零代码 + AI 双轮驱动|即速应用解锁人工智能小程序开发新范式
无需代码、无需 AI 算法功底,普通人也能快速搭建智能小程序。即速应用将人工智能与零代码开发深度融合,推出 AI 智能生成能力,用户通过自然语言描述需求,AI 自动生成小程序页面、功能模块与后台配置,覆盖商城、预约、同城、社区团购等全场景。平台内置 AI 智能推荐、智能客服、用户画像分析等能力,一键对接微信生态,打通视频号、企业微信、短信跳转,帮企业快速落地 AI 应用,抢占智慧经营先机,让每家企业都拥有 AI 驱动的智慧店铺。











