这的场景是 小程序webview 加载 H5应用
需求点:
1. 小程序的登录code 需要与H5应用的sessionId建立绑定关系
2.H5内发起微信小程序支付,支付参数传递到小程序,支付结果传递回H5
需求1
方案1 :小程序新开一个空白页面专门用于 code 与session 的绑定请求,然后返回index首页
实现过程:
H5中发送 session参数 给小程序
const path = '/pages/session/session' + param;
// 通过JSSDK的api使小程序跳转到指定的小程序页面
wx.miniProgram.navigateTo({
url: path,
});
小程序 session 页面
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
if (options.sessionId) {
// 接收参数
this.sessionId = options.sessionId;
console.log("get webview sessionId:" + options.sessionId);
wx.setStorageSync('sessionId', options.sessionId);
}
this.loginCode = wx.getStorageSync('loginCode');
this.sessionId = wx.getStorageSync('sessionId');
if (this.sessionId && this.loginCode) {
// 绑定 操作请求
this.bindSessionIdWithLoginCode(this.sessionId, this.loginCode);
wx.navigateBack({})
}
此方案的 缺点,每次启动小程序 进入绑定操作会进入一次空白页然后返回,给人闪回首页的视觉 用户体验不好
方案2 将H5获取sessionId 的请求放在小程序中,得到sessionId后 通过小程序webview 的URL传递sessionId给H5,并且H5此时才开始第一次加载数据,解决方案的闪回的不好体验
index.wxml 使用条件加载的方式 让 webview 在需要的时候才开始加载
<web-view wx:if="{{webUrl}}" src="{{webUrl}}" bindload="loadSucces"></web-view>
index.js
onLoad: function (options) {
var _this = this;
app.toLogin().then(function (res) {
_this.getSessionId();
console.log('登录后');
console.log(res);
});
}
getSessionId(){
var that = this;
// last sessionId
if (wx.getStorageSync('sessionId')){
that.bindSessionIdWithLoginCode(wx.getStorageSync('sessionId'), wx.getStorageSync('lo ginCode'));
} else {
// new sessionID
wx.request({
data: {},
success: res => {
if (res.data.sessionId) {
wx.setStorageSync('sessionId', res.data.sessionId);
wx.setStorage('sessionId', res.data.sessionId);
that.bindSessionIdWithLoginCode(res.data.sessionId, wx.getStorageSync('loginC ode'));
} else {
_this.getSessionId();
}
console.log('sessionId success!' + JSON.stringify(res));
},
fail: error => {
console.log('sessionId error!');
}
})
}
},
bindSessionIdWithLoginCode: function (sessionId, loginCode) {
var that = this;
wx.request({
data: {},
success: res => {
if (res.data === 'success') {
console.log('bind success!’);
// 关键点在 绑定成功后 开始加载 webview
that.setData({
webUrl: getApp().globalData.host + "#/return_url?wxlogincode=" + encodeURI(se ssionId)
})
console.log(that.data.webUrl);
} else {
// new code past time sessionId get new sessionId
wx.removeStorageSync('sessionId');
that.getSessionId();
}
},
fail: error => {
console.log('bind error!');
}
})
},
})
在 H5中通过路由拦截获得 小程序加载webview时 传递来的 sessionId
this.router.events.pipe(filter(e => e instanceof NavigationEnd)).subscribe((e: any) => {
console.log(e);
if (e.url.indexOf('/return_url?wxlogincode') > -1) {
localStorage.setItem('sessionId', e.url.split('=')[1]);
return;
}
}
需求2 的实现 就是 需求1中两个方案的 相互传值 结合
- 承接微信小程序外包 H5外包就找北京动点软件开发团队
承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询,索取案例! QQ:372900288 ...
- 承接小程序外包 微信小程序外包 H5外包 就找北京动点软件
承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询 QQ:372900288 微信:li ...
- 用 React 编写的基于Taro + Dva构建的适配不同端(微信小程序、H5、React-Native 等)的时装衣橱
前言 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种多样,Web.React-Native.微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表 ...
- 从0到1构建适配不同端(微信小程序、H5、React-Native 等)的taro + dva应用
从0到1构建适配不同端(微信小程序.H5.React-Native 等)的taro + dva应用 写在前面 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种 ...
- 微信小程序的ajax数据请求wx.request
微信小程序的ajax数据请求,很多同学找不到api在哪个位置,这里单独把小程序的ajax请求给列出来,微信小程序的请求就是wx.request这个api,wx.request(一些对象参数),微信小程 ...
- 开发 | 如何在微信小程序的页面间传递数据?
我们在之前发布过小程序页面传值方法的简单介绍,说明了在小程序开发中,两种常见的页面之间传值方法. 本期,知晓程序(微信号 zxcx0101)为你带来的是「倒数记日」小程序开发者带来的,小程序开发中,有 ...
- 用微信小程序做H5游戏尝试
微信小程序发布后,公司虽然没有拿到第一批内测资格,但作为微信亲密合作伙伴,一定要第一时间去尝试啦.现在微信小程序刚发布还在测试阶段,可以说是1.0版本,所以框架和结构内容都还不多,相关的文档跟微信AP ...
- 深入分析:微信小程序与H5的区别
作为前端工程师,从前端的视角,为大家分析下微信小程序和HTML5与之间的主要区别 第一条是运行环境的不同. 传统的HTML5的运行环境是浏览器,包括webview,而微信小程序的运行环境并非完整的浏览 ...
- 如何在原生微信小程序中实现数据双向绑定
官网:https://qiu8310.github.io/minapp/ 作者:Mora 在原生小程序开发中,数据流是单向的,无法双向绑定,但是要实现双向绑定的功能还是蛮简单的! 下文要讲的是小程序框 ...
随机推荐
- Vue-Cli4笔记
Vue-Cli4与Vue-Cli2区别浅谈 当时学习 Vue-Cli 的时候看的是 Vue-Cli2 的相关教程,当把 package.json 上传 github 的时候提醒有安全问题,于是准备使用 ...
- 分布式专题——详解Google levelDB底层原理
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是分布式专题的第10篇文章,我们继续来聊聊LSMT这个数据结构. LSMT是一个在分布式系统当中应用非常广泛,并且原理直观简单的数据结构 ...
- django中的缓存以及跨域
django中的缓存 先来了解以下问题
- [bash]http serevr部署wordpress
#!/bin/bash # echo "close selinux…" sed -i 's/Enforcing/disabled/' /etc/sysconfig/selinux ...
- Spss统计描述分析
总觉得有些技能学会了是不会忘的,但是还是要记录一下,怕记忆力不像狗皮膏药,并不那么牢固. 1.文件的合并 两个数据文件的合并 点击添加个案,这一步按照自己的需求选择,也可以打开外部数据集,在这里打开的 ...
- PHP7内核(五):系统分析生命周期
上篇文章讲述了模块初始化阶段之前的准备工作,本篇我来详细介绍PHP生命周期的五个阶段. 一.模块初始化阶段 我们先来看一下该阶段的每个函数的作用. 1.1.sapi_initialize_reques ...
- 二维线段树 poj-2155
题意:t组样例 ,输入 n,m,表示n*n的矩阵进行m次操作 ,C: 输入两个坐标 ,组成的矩形 进行取反操作 ,Q:对输的坐标位置输入其值. 思路:一开始想的是用1000(表示x轴)个线段树(对每段 ...
- 用css3实现摩天轮旋转的动画效果
用css3实现摩天轮旋转的动画效果 1.CSS3 @keyframes 规则如需在 CSS3 中创建动画,您需要学习 @keyframes 规则.@keyframes 规则用于创建动画.在 @keyf ...
- AI学习笔记:特征工程
一.概述 Andrew Ng:Coming up with features is difficult, time-consuming, requires expert knowledge. &quo ...
- python之xlrd和xlwt模块读写excel使用详解
一.xlrd模块和xlwt模块是什么 xlrd模块是python第三方工具包,用于读取excel中的数据: xlwt模块是python第三方工具包,用于往excel中写入数据: 二 ...