支付宝小程序里,调用支付宝获取openid api 错误
来源:7-3 vant-weapp 组件库集成
dreamJack
2020-01-07
调用支付宝获取openid api 错误
接口文档:http://www.youbaobao.xyz/mpvue-docs/api/#获取支付宝用户的openid
写回答
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 两个字段,所以获取的严格程度更高,建议你自己部署服务端来实现这个概念。
012020-01-08
相似问题