开发者技术支持-微信登录

举报
yd_273827755 发表于 2025/09/07 22:09:59 2025/09/07
【摘要】 # 问题说明仓颉编程语言是一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。主要应用于鸿蒙原生应用及服务应用等场景中,为开发者提供良好的编程体验。## 初识仓颉(1)> 编译器安装在使用仓颉编程语言进行开发时,可以选择DevEco Studio或者VsCode等主流软件进行开发,由于本篇文章主要介绍使用仓颉编程语言进行鸿蒙原生应用的开发,故不再做过多介绍。感兴趣...

# 问题说明

进行第三方微信登录时,需要获取先拿到微信返回的code,然后使用code获取到对应的登录token,完成微信登录

## 获取Code



import * as wxopensdk from '@tencent/wechat_open_sdk';
import { APP_ID } from '../Constants';

export type OnWXReq = (req: wxopensdk.BaseReq) => void
export type OnWXResp = (resp: wxopensdk.BaseResp) => void

const kTag = "WXApiEventHandlerImpl"

class WXApiEventHandlerImpl implements wxopensdk.WXApiEventHandler {
 private onReqCallbacks: Map<OnWXReq, OnWXReq> = new Map
 private onRespCallbacks: Map<OnWXResp, OnWXResp> = new Map

 registerOnWXReqCallback(on: OnWXReq) {
   this.onReqCallbacks.set(on, on)
 }
 unregisterOnWXReqCallback(on: OnWXReq) {
   this.onReqCallbacks.delete(on)
 }

 registerOnWXRespCallback(on: OnWXResp) {
   this.onRespCallbacks.set(on, on)
 }
 unregisterOnWXRespCallback(on: OnWXResp) {
   this.onRespCallbacks.delete(on)
 }

 onReq(req: wxopensdk.BaseReq): void {
   wxopensdk.Log.i(kTag, "onReq:%s", JSON.stringify(req))
   this.onReqCallbacks.forEach((on) => {
     on(req)
   })
 }

 onResp(resp: wxopensdk.BaseResp): void {
   wxopensdk.Log.i(kTag, "onResp:%s", JSON.stringify(resp))
   this.onRespCallbacks.forEach((on) => {
     on(resp)
   })
 }
}

export const WXApi = wxopensdk.WXAPIFactory.createWXAPI(APP_ID)
export const WXEventHandler = new WXApiEventHandlerImpl

将上面的代码全部复制到项目中去即可,在需要进行登录的事件中,填入下面的代码,用于向微信发送请求获取code。

let req = new wxopensdk.SendAuthReq
        req.isOption1 = false
        req.nonAutomatic = true
        req.scope = 'snsapi_userinfo,snsapi_friend,snsapi_message,snsapi_contact'
        req.state = 'none'
        req.transaction = 'test123'

        await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)

完成后,还需要获取到微信返回的code值,在EntryAbility文件中,示例代码如下:


export default class EntryAbility extends UIAbility {
  onCreate(want: Want, _launchParam: AbilityConstant.LaunchParam): void {
    this.handleWeChatCallIfNeed(want)
  }

  onNewWant(want: Want, _launchParam: AbilityConstant.LaunchParam): void {
    this.handleWeChatCallIfNeed(want)
  }

  private handleWeChatCallIfNeed(want: Want) {
    WXApi.handleWant(want, WXEventHandler)
  }
}

获取到code以后,就可以向微信发送请求,获取token。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。