小程序获取用户openid,并实现上传图片到python服务器

本文档介绍如何使用小程序实现上传图片到Python Flask服务器,并详细阐述了如何获取用户openid、encryptedData解密过程以及在Windows环境下解决Python Crpyto库的安装问题。小程序前端通过wx.login获取用户code,然后服务器通过access_token和openid获取unionId。Python后台使用官方提供的解密包处理encryptedData,创建用户专属文件夹存储上传的图片,同时提供了图片处理的步骤。
摘要由CSDN通过智能技术生成

小程序实现上传图片到python服务器

预览

老规矩,先上demo。
额。。。。
忘了,这次情况特殊没有demo,看预览图吧:
在这里插入图片描述
在这里插入图片描述返回图片的网络地址

小程序前端

  • 获取用户信息,openId,用作生成用户专属图片文件夹

    • 要生成unionId,需要知道自己小程序appid,secert_key。可以登录微信开发平台进行查看。
    • wx.login 获取 code 从而得到用户信息:encryptedDataiv ,把这三个参数传给后台
    • code特别容易过期,所以需要使用wx.checkSession激活
    • python后台通过requests.get(https://api.weixin.qq.com/wxa/getpaidunionid?access_token=ACCESS_TOKEN&openid=OPENID
      )返回两个参数 session_keyappid
    • 通过从文档中下载的python服务端文件中的
      WXBizDataCrypt(appid, session_key)
      解密返回openId
    • 注意官方给出的解密包中有两处问题
      • WXBizDataCrypt中需要修改return decryptreturn jsonify(decrypted),把dict转为json
      • windows服务器上python无法下载Crpyto,别去网上找解决方法了,那些都是胡扯,直接pip install pycryptodome就OK了
  • wx.chooseImage 选择图片

    • 官方文档中有使用方法,我们只需配置一下参数就好
  • wx.uploadFile 上传图片

    • 验证是否有openId,携带openIdwx.chooseImage生成的图片路径传给服务器

小程序代码

app.js

App({
   
  onLaunch: function() {
   
    // 展示本地存储能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    let that = this
    wx.login({
   
      success: res => {
   
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        if (res.code) {
   
          wx.getUserInfo({
   
            success: e => {
   
              let info = {
   
                encryptedData: e.encryptedData,
                iv: e.iv,
                code: res.code
              }
              wx.request({
   
                url: 'https://xxxxxx.xx/api/v/userinfo',
                header: {
   
                  'content-type': 'application/x-www-form-urlencoded'
                },
                data: {
   
                  info: JSON.stringify(info) //把object转化为json数据
                },
                method: 'POST',
                success: function(u) {
   
                  const encryptedData = u.data
                  
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值