支付宝小程序里,调用支付宝获取openid api 错误

来源:7-3 vant-weapp 组件库集成

dreamJack

2020-01-07

调用支付宝获取openid api 错误
接口文档:http://www.youbaobao.xyz/mpvue-docs/api/#获取支付宝用户的openid
图片描述
图片描述

写回答

1回答

Sam

2020-01-07

你好,我查看了一下支付宝登录部分的源码,这部分没办法通过 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
1
dreamJack
非常感谢!
2020-01-08
共1条回复

零基础入门 实战mpvue2.0多端小程序框架

mpvue,一套代码搞定多个平台小程序,前端更易上手

819 学习 · 647 问题

查看课程