你好,我查看了一下支付宝登录部分的源码,这部分没办法通过 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 两个字段,所以获取的严格程度更高,建议你自己部署服务端来实现这个概念。