返回介绍

通过 App 调用授权(微信小程序)

发布于 2023-04-06 17:51:15 字数 3829 浏览 0 评论 0 收藏 0

通过 App 调用授权(微信小程序)

第三方 App 可接入微信开放平台 SDK,实现跳转腾讯文档微信小程序,调用腾讯文档开放平台授权能力,获得用于换取 access_token 的授权码。

请先参考微信开放平台移动应用接入指南(iOS (opens new window)/Android (opens new window)),接入微信开放平台 SDK,并根据应用在微信开放平台上注册的信息,完成 SDK 的初始化操作;iOS 应用还需要按照上述文档要求,配置好应用的 Universal Link。

跳转腾讯文档微信小程序开放平台授权的 path 为 URL 编码格式,其中路径名为 packages/miniapp-open/open-auth/open-auth,并需拼接 2 个参数,具体参数的规则如下:

  • client_id:在腾讯文档开放平台申请的 Client ID;
  • state:值可以为空,如果应用需要在授权时传入一些状态信息,以便于授权完成后,继续执行特定的业务逻辑,可以自拟 state 的值,授权完成后会将该 state 值原样返回给应用。

请注意所有的参数值都需要先做一次 URL Encode,然后拼接到授权页路径上。第一个参数名前面使用 ? 号,其余的参数名前面使用 & 号。

代码示例(Android)(参考微信官方文档 (opens new window)):

String appId = "填写应用在微信开放平台的 APPID";
String clientId = "填写您在腾讯文档开放平台的 ClientID";
String state = "填写您自定义的状态参数,可留空";

WXAPI api = WXAPIFactory.createWXAPI(context, appId);
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
req.userName = "gh_252c5f06840b";
req.path = "packages/miniapp-open/open-auth/open-auth?client_id=" + URLEncoder.encode(clientId) + "&state=" + URLEncoder.encode(state);
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_RELEASE;
api.sendReq(req);

// 在 WXEntryActivity 的 onResp 中获取授权完成的 code 和 state
public void onResp(BaseResp resp) {
    if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) {
        String extraData = ((WXLaunchMiniProgram.Resp) resp).extMsg;
        JSONObject respObj = new JSONObject(extraData);
        String code = respObj.getString("code");
        String state = respObj.getString("state");
    }
}

代码示例(iOS)(参考微信官方文档 (opens new window)):

NSString *clientId = @"填写您在腾讯文档开放平台的 ClientID";
NSString *state = @"填写您自定义的状态参数,可留空";
NSString *escapedClientId = [clientId stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
NSString *escapedState = [state stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];

WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
launchMiniProgramReq.userName = @"gh_252c5f06840b";
launchMiniProgramReq.path = [NSString stringWithFormat:@"packages/miniapp-open/open-auth/open-auth?client_id=%@&state=%@", escapedClientId, escapedState];
launchMiniProgramReq.miniProgramType = WXMiniProgramTypeRelease;
[WXApi sendReq:launchMiniProgramReq];

// 在注册为微信回调函数的 onResp 中获取授权完成的 code 和 state
- (void) onResp: (BaseResp*)resp {
    if ([resp isKindOfClass: [WXLaunchMiniProgramResp class]]) {
        NSString *extraData = [(WXLaunchMiniProgramResp *)resp extMsg];
        NSError *jsonError;
        NSDictionary *respObj = [NSJSONSerialization JSONObjectWithData:[extraData dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&jsonError];
        NSString *code = [respObj valueForKey:@"code"];
        NSString *state = [respObj valueForKey:@"state"];
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文