Запишите некоторые проблемы, возникшие при разработке Мини-программы, и их решения.
1. Версия для разработчиков WeChat 1.0.0
GET 1351598279.appservice.open.weixin.qq.com/appservice net::ERR_NAME_NOT_RESOLVED
Решение
Сеть компании является общедоступной, и WeChat следует запретить.
Настройки -----> Настройки прокси -----> Не применять прокси, проверьте прямую сеть
2. Соответствующий сертификат сервера недействителен. Консольный ввод showRequestInfo() может получить более подробную информацию
Решение
Запрос данных апплета должен бытьhttps
, Если нет сертификата для отладки, вы можете сначала выбрать не проверять имя домена безопасности в настройках проекта,TLS
версия иHTTPS
Сертификат
3. Установить класс по условию
<text wx:for="{{titles}}"
wx:key="{{item}}"
class="home-title {{index == activeIndex ? 'active' : ''}}"
bindtap='changeClassify'>
{{item.name}}
</text>
// index == activeIndex classw为 "home-title active" 否则为 "home-title "
4. Вложение циклов
// 普通的单次循环
<text wx:for="{{titles}}" wx:key="{{index}}">{{item.name}}</text>
//循环嵌套时使用 wx:for-item="XXX"
<view wx:for="{{hotArr}}">
<view class="classify-title" bindtap="goClassifyPage">
<text>{{item.name}}</text>
</view>
<view class="classify-items">
<view class="classify-item" wx:for="{{item.data}}" wx:for-item="cell" wx:key="index">
<view>
<text class="classify-item_name">{{cell.name}}</text>
</view>
</view>
</view>
</view>
5. Передача параметров перехода на маршрутизатор и получение параметров
//wxml
<text wx:for="{{titles}}" wx:key="{{index}}" bindtap='changeClassify' data-id="{{index}}">{{item.name}}</text>
//js
function changeClassify(e) {
//
let id = e.currentTarget.dataset.id;
//跳转到classify 页面
wx.navigateTo({
url: '../classify/classify?id=' + id
})
}
//classify 页面 获取参数
onLoad: function (opts) {
console.log(opts.id)
console.log(this.options.id)
}
6. Потяните вверх, чтобы загрузить больше, потяните вниз, чтобы обновить
- Непосредственно используйте собственный метод программы маленького города
onReachBottom
,onPullDownRefresh
- При использовании
scroll-view
Компоненты также могут прослушиватьbindscrolltoupper
,bindscrolltolower
// 上拉加载更多
onReachBottom: function() {
if (this.data.next != null) {
this.setData({ isHideLoadMore: false })
this.getNextPage()
}
}
// 下拉刷新
onPullDownRefresh: function() {
this.refreshData()
}
7. Компонентизацияtemplate
использование
Для общих компонентов можно нарисоватьtemplate
/**
* 1. 给template 设置name
* 2. 组件传过来的值可以直接使用 hidden="{{!isloading}}"
*/
<template name="loading">
<view class="weui-loadmore" hidden="{{!isloading}}">
<view class="weui-loading"></view>
<view class="weui-loadmore__tips">正在加载</view>
</view>
</template>
//
/**
* 使用通用的template
* 1. 按路径引入
* 2. 设置 is 等于 template的name data="{{isloading}}" 给template的数据
*/
<import src="../template/loading.wxml"/>
<template is="loading" data="{{isloading}}"></template>
8. Получите уникальный ID и openid пользователя
UniqueID
так же какopenid
Получение конфиденциальной информации, связанной с пользователем, возвращаемые данныеencryptedData
Это зашифрованные данные. Чтобы извлечь информацию, данные необходимо расшифровать.
Официальный сайт предоставляет алгоритм расшифровки, просто возьмите версию nodejs и немного ее модифицируйте.
- скачатьcryptojsПоместите его в каталог utils проекта
- Создайте новый в каталоге utils
decode.js
напишите следующее
//utils/decode.js
var Crypto = require('./cryptojs/cryptojs.js').Crypto;
function WXBizDataCrypt(appId, sessionKey) {
this.appId = appId
this.sessionKey = sessionKey
}
WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {
// base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码
var encryptedData = Crypto.util.base64ToBytes(encryptedData)
var key = Crypto.util.base64ToBytes(this.sessionKey);
var iv = Crypto.util.base64ToBytes(iv);
// 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充
var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);
try {
// 解密
var bytes = Crypto.AES.decrypt(encryptedData, key, {
asBpytes: true,
iv: iv,
mode: mode
});
var decryptResult = JSON.parse(bytes);
} catch (err) {
console.log(err)
}
if (decryptResult.watermark.appid !== this.appId) {
console.log(err)
}
return decryptResult
}
module.exports = WXBizDataCrypt
- Добавьте decode.js в app.js для расшифровки данных.
var WXBizDataCrypt = require('utils/decode.js');
var AppId = 'XXXXXX'
var AppSecret = 'XXXXXXXXX'
//app.js
App({
onLaunch: function () {
//调用登录接口
wx.login({
success: function (res) {
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
data: {
appid: AppId,
secret: AppSecret,
js_code: res.code,
grant_type: 'authorization_code'
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method: 'GET',
success: function(res) {
var pc = new WXBizDataCrypt(AppId, res.data.session_key)
wx.getUserInfo({
success: function (res) {
var data = pc.decryptData(res.encryptedData, res.iv)
console.log('解密后 data: ', data)
}
})
},
fail: function(res) {
}
})
}
})
}
})
Примечание. Чтобы получить учетную запись UniqueID на открытой платформе WeChat, необходимо пройти аутентификацию квалификации разработчика, в противном случае расшифрованные данные будут недоступны.UniqueID
поле
Расшифрованные данные
Потому что требования компании к версии 1.0 относительно просты. От разработки до запуска прошло два дня, и проверка апплета прошла на удивление быстро. Он был одобрен менее чем через два часа после отправки. Сильно сомневаюсь, что не проверяли.