uniapp 引入支付宝授权的方法
时间: 2023-08-06 18:02:33 浏览: 209
在uniapp中引入支付宝授权,需要遵循以下步骤:
1. 在支付宝开放平台上创建应用,并获取到应用的APPID和应用私钥。
2. 在uniapp项目中安装`uni-simple-router`和`crypto-js`依赖:
```
npm install uni-simple-router crypto-js
```
3. 在项目的`main.js`文件中引入并注册`uni-simple-router`和`crypto-js`:
```javascript
import Vue from 'vue'
import App from './App'
import router from './router'
// 引入 uni-simple-router
import routerLink from 'uni-simple-router'
Vue.use(routerLink)
// 引入 crypto-js
import CryptoJS from 'crypto-js'
Vue.prototype.$CryptoJS = CryptoJS
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
```
4. 在项目的`manifest.json`文件中添加支付宝小程序的配置:
```json
{
"mp-alipay": {
"appid": "支付宝应用的APPID",
"pageRoot": "pages/",
"plugins": {
"myPlugin": {
"version": "1.0.0",
"provider": "支付宝应用的开发者名称"
}
}
}
}
```
5. 在需要进行支付宝授权的页面中,编写以下代码:
```javascript
// 引入 uni-simple-router
import { RouterMount } from 'uni-simple-router'
export default {
mounted() {
// 获取授权码
const authCode = this.getAuthCode()
// 跳转回原来的页面
RouterMount.afterEach((toRoute, fromRoute) => {
if (fromRoute.path === '/auth') {
uni.navigateBack()
}
})
// 跳转到支付宝授权页面
uni.navigateTo({
url: `alipays://platformapi/startapp?appId=APPID&authType=AUTH_TYPE&scope=SCOPE&state=STATE&redirectUri=REDIRECT_URI`
.replace('APPID', '支付宝应用的APPID')
.replace('AUTH_TYPE', 'AUTHORIZATION')
.replace('SCOPE', 'auth_user')
.replace('STATE', '')
.replace('REDIRECT_URI', encodeURIComponent(`https://example.com/auth?authCode=${authCode}`))
})
},
methods: {
// 获取授权码
getAuthCode() {
const timestamp = Date.now()
const nonceStr = Math.random().toString(36).substr(2, 15)
const appId = '支付宝应用的APPID'
const redirectUri = 'https://example.com/auth'
const state = ''
const scope = 'auth_user'
const sign = this.getSign(timestamp, nonceStr, appId, redirectUri, scope, state)
return `${timestamp}#${nonceStr}#${appId}#${redirectUri}#${state}#${scope}#${sign}`
},
// 获取签名
getSign(timestamp, nonceStr, appId, redirectUri, scope, state) {
const signStr = `apiname=auth/authcodeAuthorize&app_id=${appId}&auth_type=AUTHORIZATION&biz_content={"scopes":["${scope}"],"state":"${state}","redirect_uri":"${redirectUri}","mode":"POPUP"}&charset=utf-8&format=json&method=alipay.system.oauth.token&nonce=${nonceStr}&sign_type=RSA2×tamp=${timestamp}&version=1.0`
const privateKey = '支付宝应用的应用私钥'
const sign = this.$CryptoJS.SHA256(signStr).toString()
const key = this.$CryptoJS.enc.Base64.parse(privateKey)
const signature = this.$CryptoJS.HmacSHA256(sign, key).toString()
return signature
}
}
}
```
在这段代码中,我们通过`uni.navigateTo`方法跳转到支付宝授权页面,并设置了相应的参数,包括APPID、AUTH_TYPE、SCOPE、STATE和REDIRECT_URI。其中,`REDIRECT_URI`参数需要进行URL编码,并在跳转到授权页面后,支付宝会自动回调该地址,并在URL中带上授权码`authCode`。
在授权页面的`mounted`生命周期钩子中,我们通过`uni.navigateBack`方法回到原来的页面,并在回调中获取到授权码。授权码的生成方式为`timestamp#nonceStr#appId#redirectUri#state#scope#sign`,其中,`sign`是根据授权请求参数和应用私钥生成的签名。最后,我们可以使用授权码调用支付宝的API,例如获取用户信息等。
阅读全文