请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答

1回答

你好,我查看了一下支付宝登录部分的源码,这部分没办法通过 API 直接开放给你使用,如果要实现这个功能需要你部署课程的服务端代码,或者自己单独写一个支付宝登录接口来实现,原因是支付宝登录依赖一个 PrivateKey,该内容需要通过支付宝开发者工具来生成,并且存储为一个文件格式,该文件放在前端是非常不安全的,在我实现的源码中,该文件是位于服务端源码中的,这样可以保证你登录的安全,下面分享一下支付宝的登录源码,在课程 git 仓库中也可以下载到:

app.get('/openId/get/alipay', (req, res) => {
  const appId = req.query.appId
  const code = req.query.code
  if (!appId || !code) {
    onFail(res, '获取openId失败')
  } else {
    const alipaySdk = new AlipaySdk({
      appId,
      privateKey: fs.readFileSync(appIdMap[appId], 'ascii')
    })
    alipaySdk.exec('alipay.system.oauth.token', {
      grantType: 'authorization_code',
      code,
      refreshToken: 'token'
    }).then(result => {
      console.log('alipay', result)
      if (result) {
        const { alipayUserId, userId, accessToken } = result
        onSuccess(res, '获取openId成功', {
          openid: `${userId}|${alipayUserId}`,
          session_key: accessToken
        })
      } else {
        onFail(res, '获取openId失败')
      }
    }).catch(err => {
      onFail(res, '获取openId失败', err)
    })
  }
})


下面的源码是根据 appId 和 privateKey 来初始化 alipaySdk 实例对象:

const alipaySdk = new AlipaySdk({
  appId,
  privateKey: fs.readFileSync(appIdMap[appId], 'ascii')
})


下面的源码是调用指定接口获得支付宝的鉴权信息:

alipaySdk.exec('alipay.system.oauth.token', {
  grantType: 'authorization_code',
  code,
  refreshToken: 'token'
})


支付宝小程序鉴权的安全级别比微信小程序更高,微信小程序中我们仅仅通过一个 GET  接口就可以拿到用户的 openId,但是支付宝小程序中没有 openId 这个概念,取而代之的是支付宝的 userId 和小程序专属的 userId 两个字段,所以获取的严格程度更高,建议你自己部署服务端来实现这个概念。

0 回复 有任何疑惑可以回复我~
  • 提问者 dreamJack #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-01-08 09:22:11
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信