全部产品
云市场

用户授权

更新时间:2019-09-09 15:11:49

my.getAuthCode

mPaaS 不提供用户授权功能,如果您仍想使用此 API 进行用户授权,需实现相关 JSAPI 并接入自己的用户授权机制。

入参

名称 类型 必填 描述
scopes String/Array 授权类型,默认 auth_base。支持 auth_base(静默授权)/ auth_user(主动授权) / auth_zhima(芝麻信用)
success Function 调用成功的回调函数
fail Function 调用失败的回调函数
complete Function 调用结束的回调函数(调用成功、失败都会执行)

success 返回值

名称 类型 描述
authCode String 授权码
authErrorScope Key-Value 失败的授权类型,key 是授权失败的 scope,value 是对应的错误码。
authSucessScope Array 成功的授权 scope

代码示例

  1. my.getAuthCode({
  2. scopes: 'auth_user',
  3. success: (res) => {
  4. my.alert({
  5. content: res.authCode,
  6. });
  7. },
  8. });
  9. my.getAuthCode({
  10. scopes: ['auth_user']
  11. success: (res) => {
  12. my.alert({
  13. content: res.authCode,
  14. });
  15. },
  16. });

扩展说明

Android

您需要完成以下几步来扩展 API:

  1. 实现自定义 H5Plugin,需要拦截 getAuthCode 事件来处理用户授权。
  2. 入参处理:小程序 API 的 scopes 参数在客户端中将被映射为 scopeNicks 参数,客户端可依据自己的用户授权机制进行处理或者不处理。
  3. 出参处理:客户端返回给小程序返回的结果中,authcode 会被映射为 authCode,其他无变化。
  4. 注册自定义 H5Plugin。

自定义 H5Plugin 代码示例(不包含注册):

  1. package com.mpaas.demo.nebula;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.alipay.mobile.antui.dialog.AUNoticeDialog;
  6. import com.alipay.mobile.common.logging.api.LoggerFactory;
  7. import com.alipay.mobile.h5container.api.H5BridgeContext;
  8. import com.alipay.mobile.h5container.api.H5Event;
  9. import com.alipay.mobile.h5container.api.H5EventFilter;
  10. import com.alipay.mobile.h5container.api.H5SimplePlugin;
  11. import com.alipay.mobile.nebula.util.H5Utils;
  12. import java.util.Arrays;
  13. public class H5GetAuthCodePlugin extends H5SimplePlugin {
  14. private static final String TAG = "H5GetAuthCodePlugin";
  15. private static final String GET_AUTH_CODE = "getAuthCode";
  16. @Override
  17. public void onPrepare(H5EventFilter filter) {
  18. super.onPrepare(filter);
  19. filter.addAction(GET_AUTH_CODE);
  20. }
  21. @Override
  22. public boolean interceptEvent(H5Event event, final H5BridgeContext context) {
  23. if (GET_AUTH_CODE.equals(event.getAction())) {
  24. JSONObject params = event.getParam();
  25. JSONArray jScopes = H5Utils.getJSONArray(params, "scopeNicks", null);
  26. if (jScopes != null && jScopes.size() > 0) {
  27. String[] scopes = new String[jScopes.size()];
  28. scopes = jScopes.toArray(scopes);
  29. LoggerFactory.getTraceLogger().info(TAG, Arrays.toString(scopes));
  30. // 可自行处理scopes,本示例直接返回结果给小程序
  31. AUNoticeDialog dialog = new AUNoticeDialog(event.getActivity(), "授权登录", "确认授权给此小程序应用吗?", "确定", "取消");
  32. dialog.setPositiveListener(new AUNoticeDialog.OnClickPositiveListener() {
  33. @Override
  34. public void onClick() {
  35. JSONObject result = new JSONObject();
  36. result.put("authcode", Long.toHexString(System.currentTimeMillis()));
  37. context.sendBridgeResult(result);
  38. }
  39. });
  40. dialog.setNegativeListener(new AUNoticeDialog.OnClickNegativeListener() {
  41. @Override
  42. public void onClick() {
  43. context.sendError(11, "用户取消授权");
  44. }
  45. });
  46. dialog.show();
  47. return true;
  48. }
  49. }
  50. return false;
  51. }
  52. }

iOS

参考 自定义 JSAPI > Plist 注册 > 注册 JSAPI 配置新的 JSAPI。

您需要完成以下几步来扩展 API:

  1. 开发者实现 getAuthCode 对应的 JSAPI 实现类 JsApiHandlerSample
  2. 入参处理:小程序 API 传入的参数皆通过 data 对象发送给 JsApiHandlerSample 的回调方法,scopes 参数在客户端中将被映射为 scopeNicks 参数,客户端可依据自己的用户授权机制进行处理或者不处处理。
  3. 出参处理:客户端返回给小程序返回的结果中,authcode 会被映射为 authCode,其他无变化。
  4. 注册自定义 JSAPI。
  5. 当向小程序返回正确的值时,请调用回调函数中 callback,具体返回值字段参见 success 返回值
  6. 当出现错误,需向小程序返回错误的值时,需调用回调函数中 callback 返回失败结果。

自定义 JSAPI 代码示例(不包含注册):

  1. #import "JsApiHandlerSample.h"
  2. #import <UIKit/UIKit.h>
  3. @interface JsApiHandlerSample()<UIAlertViewDelegate>
  4. @property (nonatomic, strong) NSString *authCode;
  5. @end
  6. @implementation JsApiHandlerSample
  7. - (void)handler:(NSDictionary *)data context:(PSDContext *)context callback:(PSDJsApiResponseCallbackBlock)callback
  8. {
  9. [super handler:data context:context callback:callback];
  10. NSArray *scopeNicks = data[@"scopeNicks"];
  11. UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"授权登录" message:@"确认授权给此小程序应用吗?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
  12. [alertView show];
  13. if (self.authCode && [self.authCode isKindOfClass:[NSString class]]) {
  14. callback(@{@"authcode": self.authCode});
  15. } else {
  16. callback(@{@"error": @(11), @"errorMessage":@"用户取消授权"});
  17. }
  18. }
  19. - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
  20. {
  21. if (0 == buttonIndex) {
  22. self.authCode = @"xxx";
  23. } else {
  24. self.authCode = nil;
  25. }
  26. }
  27. @end