小程序实现上传图片到python服务器
预览
老规矩,先上demo。
额。。。。
忘了,这次情况特殊没有demo,看预览图吧:
小程序前端
-
获取用户信息,
openId
,用作生成用户专属图片文件夹- 要生成unionId,需要知道自己小程序appid,secert_key。可以登录微信开发平台进行查看。
- wx.login 获取
code
从而得到用户信息:encryptedData
,iv
,把这三个参数传给后台 - code特别容易过期,所以需要使用
wx.checkSession
激活 - python后台通过requests.get(https://api.weixin.qq.com/wxa/getpaidunionid?access_token=ACCESS_TOKEN&openid=OPENID
)返回两个参数session_key
和appid
- 通过从文档中下载的python服务端文件中的
WXBizDataCrypt(appid, session_key)
解密返回openId
- 注意官方给出的解密包中有两处问题
- WXBizDataCrypt中需要修改
return decrypt
为return jsonify(decrypted)
,把dict转为json - windows服务器上python无法下载Crpyto,别去网上找解决方法了,那些都是胡扯,直接
pip install pycryptodome
就OK了
- WXBizDataCrypt中需要修改
-
wx.chooseImage
选择图片- 官方文档中有使用方法,我们只需配置一下参数就好
-
wx.uploadFile
上传图片- 验证是否有
openId
,携带openId
以wx.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