uniapp接入支付宝登录及订阅消息教程

与微信QQ等小程序不同,支付宝小程序登录授权稍微麻烦一点,主要每次请求都需要配置签名和私钥等,不过原理还是差不多的,官方也有专门的node.js的SDK,只要能够正确的使用这个SDK,接入也并不是特别困难。下面来看一下接入教程吧。

生成并配置密钥

首先我们需要配置小程序的接口加签方式,如下图所示:

uniapp接入支付宝登录及订阅消息教程_第1张图片

配置上述加密方式需要用到官方的加密工具,现在推出了一个在线加密的程序,如下图所示,进入在线工具页面后,一定要选择PKCS1(非JAVA适用),因为我们使用的是node.js开发,所以不能选择java。然后点击生成密钥,下面两个框中就会出现应用的私钥和公钥,这两个都需要用到的。

uniapp接入支付宝登录及订阅消息教程_第2张图片

将上图中的应用私钥复制出来,新建一个文件(名称为:private-key.pem),然后把私钥放进去。接着进入小程序开发设置页面,设置接口加签方式,将上图中的应用公钥输入到下图的输入框中,保存即可。

uniapp接入支付宝登录及订阅消息教程_第3张图片

以上小程序的密钥就算配置成功了。

在云函数中配置SDK

sdk的安装在之前的云函数中提到过,就不具体详细讲解了,主要就是在云函数的命令窗口输入如下代码即可。

npm install alipay-sdk

安装成功后,将之前保存的private-key.pem文件放在云函数的根目录中,最后在云函数中进行引用就可以了,代码如下:

const AlipaySdk = require('alipay-sdk').default;
const fs = require('fs');
var path = require("path");


const alipaySdk = new AlipaySdk({
  appId: '你的小程序id',
  privateKey: fs.readFileSync(path.resolve(__dirname, './private-key.pem'), 'ascii')
});

以上就完成了uniapp云函数的sdk配置。

获取用户的userId

这个userId其实就是微信小程序中的openid,因为不管是什么基于用户的操作都是需要通过这个userId来实现的,这里就直接贴代码了:

// 小程序前端代码
my.getAuthCode({
     scopes: ['auth_user'],
     success: (res) => {
         console.log(res.authCode)
         if (res.authCode) {
           a.callFunction({
                 name:"login",
                 data:{
                   code:res.authCode
                  }
         }).then(res=>{
         console.log(res)
         })
         }
         },
});

通过getAuthCode获取操作所需要的code,这个和微信小程序好像是一样的,然后在通过云函数获取到用户的userId,代码如下:

const auth = await alipaySdk.exec('alipay.system.oauth.token', {
      // 请求参数
      grantType: 'authorization_code',
      appId: '2021002184690186',
      code: event.code,
      charset: 'utf-8',
      sign_type: 'RSA2',
      version: '1.0'
    });
    let userId= auth.userId;

这样就成功获取到用户的userId了。

订阅消息的订阅与发送

这个基本上就和微信小程序的订阅消息一样,在前端订阅,然后后端记录之后定时发送消息就可以了。贴一下代码:

// 前端订阅消息
requestSubscribeMessage({
   entityIds: ['你的订阅消息id'],
    callback(res) {
          console.log('订阅回调', res);
           if (res.success) {
                    // 订阅成功
              my.call('toast', {
                  content: '模板订阅成功',
                   type: 'success',
              });
            } else {
               switch (res.errorCode) {
                        case 11: {
                          my.call('toast', {
                            content: '用户未订阅关闭弹窗',
                          });
                          break;
                        }
                        default: {
                          my.call('toast', {
                            content: `ErrorCode: ${res.errorCode}, ErrorMsg: ${res.errorMessage}`,
                          });
                          break;
                        }
                      }
                    }
                  },
                });

订阅成功后后端进行发送就可以了,代码如下:

const send = await alipaySdk.exec('alipay.open.app.mini.templatemessage.send', {
        appId: '你的小程序id',
        charset: 'utf-8',
        sign_type: 'RSA2',
        version: '1.0',
        timestamp: "yyyy-MM-dd HH:mm:ss", // 注意时间的格式
        bizContent: {
          to_user_id: "用户的userId",
          user_template_id: "订阅消息id",
          page: "pages/index/index",
          data: {   // 这是订阅消息的参数
            "keyword1": {
              "value": message.data
            },
            "keyword2": {
              "value": now_date
            }
          }
        }
      });

主要需要注意的就是订阅消息的用户参数必须写在bizContent中,参考上述代码就没啥问题。部分内容可以参考小程序添加订阅消息uniapp详细教程

以下是支付宝演示小程序:

uniapp接入支付宝登录及订阅消息教程_第4张图片

以上就是本期的全部内容了,不过不懂的可以留言告诉我,或者你不想动手也可以联系我有偿添加该功能。对了最近支付宝活动领取大额通用红包,没领的可以扫码下方二维码领取一下,也算是支持本公众号了。

uniapp接入支付宝登录及订阅消息教程_第5张图片

你可能感兴趣的:(java,python,小程序,vue,js)