HarmonyOS NEXT——【鸿蒙接入微信/支付宝登录】

1、鸿蒙集成微信登录

1.1、申请授权码

首先我们在接入微信sdk之前,需要在微信开放平台申请平台的id授权码和secret用来进行授权。申请secret我们需要填写BundleID和Identifier,那么这两个东西其实对应的就是鸿蒙应用的包名appName以及鸿蒙应用的appid,我们将应用信息填写后等待审核完成后即可获取到应用对应的平台授权码。接入指南 / 鸿蒙接入指南

补充:如果您还未创建鸿蒙项目,具体查看鸿蒙官网项目创建和发布指导:创建HarmonyOS应用/元服务-创建应用-创建项目和应用-AppGallery Connect帮助中心 - 华为HarmonyOS开发者

1.1.1、查看Bundle ID:

Bundle ID 指的是鸿蒙应用的包名:

1.1.2、查看鸿蒙应用appid:

Identifier 指的是鸿蒙应用的 appId,详情可以在AGC平台上查看:

1.1.3、申请成功并查看授权码:(大概需要等待审核时间一天左右)

申请成功后,将可以在微信开放平台——开发配置——鸿蒙应用,查看到APPID以及AppSecret这两个授权码,在后续集成微信sdk中需要使用。

1.2、微信登录

效果:

参考代码:

import common from '@ohos.app.ability.common';
import * as wxopensdk from '@tencent/wechat_open_sdk';
import { ThirdBindParams } from '../../../../models/thirdLogin/ThirdLoginModel';
import { DialogContent2, H5ShowCustomDialog2 } from '../../../../view/H5CustomDialog';
import { CommonConstants } from '../../../constants/CommonConstants';
import { Request } from '../../request';
import { ThirdBindLoginSend } from './ThirdBindLoginSend';
import { OnWXResp, WXApi, WXEventHandler } from './WXApiWrap';
​
​
export class WXTool {
  static async WXAuthorize() {
    return new Promise<ThirdBindParams>(async (resolve, reject) => {
​
      let onWXResp: OnWXResp = (resp) => {
        let WXCode: string = resp['code']
        if (resp.errCode === 0 && WXCode && WXCode.length > 0) {
          const authRespUrl =
            `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${CommonConstants.WXAPP_ID}&secret=${CommonConstants.WXAPP_SECRET}&code=${WXCode}&grant_type=authorization_code`
          Request.get<object>(authRespUrl).then((res) => {
            let WXAuthCode: string = res['openid']
            //微信授权成功后返回openId用于登录使用,接下来的逻辑就是应用登录的相关逻辑,这里根据业务需求自行编写。
            resolve(WXAuthCode)
          })
        } else {
        
        //这里是我自定义的授权失败的提示框,可根据需求自行更换
          let content: DialogContent2 = {
            title: '提示',
            message: "授权失败",
            rightText: '确认',
          }
          H5ShowCustomDialog2(content)
        }
      }
      WXEventHandler.registerOnWXRespCallback(onWXResp)
     
     //根据需要,配置相关参数
      let req = new wxopensdk.SendAuthReq
      req.isOption1 = false
      req.nonAutomatic = true
      req.scope = 'snsapi_userinfo,snsapi_friend,snsapi_message,snsapi_contact'
      req.state = 'bankoftianjin'
      req.transaction = 'bankoftianjin'
​
      let finished = await WXApi.sendReq(getContext() as common.UIAbilityContext, req)
      if (!finished) {
​
      }
    })
  }
}
​
export async function StartWXLogin() {
  let thirdBindParamObj: ThirdBindParams = await WXTool.WXAuthorize()
  if (thirdBindParamObj) {
    ThirdBindLoginSend.ThirdLoginTrade(thirdBindParamObj)
  }
}

这里我提供下相关sdk导入的参考代码,具体参考微信开放平台相关demo以及文档:

//entry\src\main\ets\common\utils\微信支付宝三方SDK工具\微信支付宝登录\WXApiWrap.ets
import * as wxopensdk from '@tencent/wechat_open_sdk';
import { CommonConstants } from '../../../constants/CommonConstants';
​
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)
    })
  }
}
  /**
   * !!!这里的appid和secret就是一开始申请的授权码。(填写不正确则无法成功进入微信应用!!!)
   * WXAPP_ID = "wx4e71fe1xxxxxxxxx"
   * WXAPP_SECRET = "305a1eb0dc9dxxxxxxxxxxx"
   */
export const WXApi = wxopensdk.WXAPIFactory.createWXAPI(CommonConstants.WXAPP_ID)
export const WXEventHandler = new WXApiEventHandlerImpl

2、鸿蒙集成支付宝sdk登录应用

2.1、获取支付宝平台AppId:

获取 APPID - 支付宝文档中心

2.2、集成支付宝登录:

获取到阿里平台的APPID之后我们便可以开始集成sdk了,步骤较为简单,详情参考阿里开发文档极简版 SDK 调用方法 - 支付宝文档中心

效果:

参考代码

import { AFServiceParams, AFWantParams, AFServiceCenter, AFAuthServiceResponse, AFService } from '@alipay/afservicesdk';
import { ThirdAuthLoginQry, ThirdBindParams } from '../../../../models/thirdLogin/ThirdLoginModel';
import { CommonConstants } from '../../../constants/CommonConstants';
import { Request } from '../../request';
import { ThirdBindLoginSend } from './ThirdBindLoginSend';
​
export class ALITool {
  /**
   * 支付宝登录授权
   */
  static async AliAuthorize() {
    return new Promise<ThirdBindParams>((resolve, reject) => {
​
      let bizParams = new Map<string, string>()
      let url =
        encodeURIComponent(`https://authweb.alipay.com/auth?auth_type=PURE_OAUTH_SDK&app_id=${CommonConstants.ALIAPP_ID}&scope=auth_user&state=init`)   //!!!这里的appid需要拼接的是以上步骤获取的阿里平台的授权码!(填写错误将会跳转报错)
      bizParams.set("url", url);
​
      let backWant: AFWantParams = {
        bundleName: "com.xxxxxxxx", //鸿蒙应用包名
        moduleName: "entry",
        abilityName: "EntryAbility"
      }
​
      let params =
        new AFServiceParams(bizParams, false, true, 'AliPay', backWant, (response: AFAuthServiceResponse) => {
          let result = response.result
          if (result) {
            let parameters = result['parameters']
            if (parameters) {
              let authcode: string = parameters['auth_code']
              if (authcode && authcode.length > 0) {
                  //阿里支付宝授权成功后返回openId用于登录使用,接下来的逻辑就是应用登录的相关逻辑,这里根据业务需求自行编写。
                      resolve(authcode)
              }
​
            }
          }
​
        })
      AFServiceCenter.call(AFService.AFServiceAuth, params)
    })
  }
}
​
export async function StartALILogin() {
  let thirdBindParamObj: ThirdBindParams = await ALITool.AliAuthorize()
  if (thirdBindParamObj) {
    ThirdBindLoginSend.ThirdLoginTrade(thirdBindParamObj)
  }
}

### 实现鸿蒙系统中的QQ第三方登录功能 要在鸿蒙系统中实现QQ第三方登录功能,开发者需要遵循HarmonyOS的服务框架以及腾讯放平台的相关API文档。以下是具体的技术细节: #### 1. 集成腾讯放平台SDK 开发人员需先注册并申请成为腾讯放平台的开发者账户[^3]。通过该平台获取应用对应的AppID以及其他必要的密钥息。这些凭证对于后续调用腾讯服务接口至关重要。 #### 2. 创建HAP项目配置文件 在构建支持QQ登录的应用程序之前,应设置好项目的`config.json`文件,在其中声明所需的权限和远程服务能力。例如,添加网络访问权限以便能够连接到腾讯服务器验证用户身份: ```json { "reqPermissions": [ { "name":"ohos.permission.INTERNET" } ] } ``` 此部分操作确保应用程序具备基本联网能力来完成OAuth流程[^4]。 #### 3. 编写代码逻辑处理授权过程 利用腾讯提供的社交分享与账号体系类库(Tencent Open SDK),按照官方指引编写相应业务逻辑代码片段如下所示: ```java // 初始化 Tencent 对象实例 private static final String APP_ID = "your_app_id"; Tencent mTencent = Tencent.createInstance(APP_ID, this); public void loginToQq() { if (!mTencent.isSessionValid()) { mTencent.login(this,"all", new BaseUiListener()); } else { // 已经登陆过的情况下的处理... } } class BaseUiListener implements IUiListener { @Override public void onComplete(Object response) { Log.d(TAG,response.toString()); } @Override public void onError(UiError e) {} @Override public void onCancel() {} } ``` 上述示例展示了如何初始化Tencent对象并通过它发起一次完整的QQ登录请求[^5]。 #### 4. 测试与发布 最后一步是对整个集成方案进行全面测试,确认各环节正常工作无误之后再正式提交审核上线。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值