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,芝麻信用分数获取成功。
支付宝授权获取芝麻信用分数-芝麻小程序-小程序码在线生成
浏览量:6812
时间:
来源:narkang
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

最新资讯
-
抖音再现本地生活服务,咫尺同城圈商业变现新通道
短视频成为本地生活探店网红营销变现引流的新阵地,每一位网红都渴望在短视频内“一夜爆红”。即速应用团队对多商家小程序进行升级,打造了咫尺同城圈:“同城探店营销助手”,不仅完善商家营销技巧,还助力探店网红玩转本地生活服务。 -
抖音再现本地生活服务,咫尺同城圈商业变现新通道
短视频成为本地生活探店网红营销变现引流的新阵地,每一位网红都渴望在短视频内“一夜爆红”。即速应用团队对多商家小程序进行升级,打造了咫尺同城圈:“同城探店营销助手”,不仅完善商家营销技巧,还助力探店网红玩转本地生活服务。 -
阿坝小程序代理
阿坝藏族羌族小程序代理公司有哪些?阿坝藏族羌族小程序代理平台哪个好?阿坝藏族羌族小程序代理商怎么收费,代理政策如何?下面就让即速应用产品经理jisuapp.cn来告诉你吧!