这的场景是 小程序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({
        url: 'https://zeno-****',
        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({
            url: 'https:/**/openapi/element/wechat/auth/' + sessionId + '/' + loginCode,
            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]);
        window.location.replace('https://h5.fuwugu.net');
    return;
    }
   }
 
需求2 的实现 就是 需求1中两个方案的 相互传值 结合

微信小程序与H5数据传递的更多相关文章

  1. 承接微信小程序外包 H5外包就找北京动点软件开发团队

    承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询,索取案例! QQ:372900288 ...

  2. 承接小程序外包 微信小程序外包 H5外包 就找北京动点软件

    承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询 QQ:372900288 微信:li ...

  3. 用 React 编写的基于Taro + Dva构建的适配不同端(微信小程序、H5、React-Native 等)的时装衣橱

    前言 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种多样,Web.React-Native.微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表 ...

  4. 从0到1构建适配不同端(微信小程序、H5、React-Native 等)的taro + dva应用

    从0到1构建适配不同端(微信小程序.H5.React-Native 等)的taro + dva应用 写在前面 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种 ...

  5. 微信小程序的ajax数据请求wx.request

    微信小程序的ajax数据请求,很多同学找不到api在哪个位置,这里单独把小程序的ajax请求给列出来,微信小程序的请求就是wx.request这个api,wx.request(一些对象参数),微信小程 ...

  6. 开发 | 如何在微信小程序的页面间传递数据?

    我们在之前发布过小程序页面传值方法的简单介绍,说明了在小程序开发中,两种常见的页面之间传值方法. 本期,知晓程序(微信号 zxcx0101)为你带来的是「倒数记日」小程序开发者带来的,小程序开发中,有 ...

  7. 用微信小程序做H5游戏尝试

    微信小程序发布后,公司虽然没有拿到第一批内测资格,但作为微信亲密合作伙伴,一定要第一时间去尝试啦.现在微信小程序刚发布还在测试阶段,可以说是1.0版本,所以框架和结构内容都还不多,相关的文档跟微信AP ...

  8. 深入分析:微信小程序与H5的区别

    作为前端工程师,从前端的视角,为大家分析下微信小程序和HTML5与之间的主要区别 第一条是运行环境的不同. 传统的HTML5的运行环境是浏览器,包括webview,而微信小程序的运行环境并非完整的浏览 ...

  9. 如何在原生微信小程序中实现数据双向绑定

    官网:https://qiu8310.github.io/minapp/ 作者:Mora 在原生小程序开发中,数据流是单向的,无法双向绑定,但是要实现双向绑定的功能还是蛮简单的! 下文要讲的是小程序框 ...

随机推荐

  1. No compiler is provided in this environment报错解决方案

  2. Python入门到放弃

    前传:计算机基础 01-计算机基础1 02-计算机基础2 第一章:Python入门 01-python入门之解释器环境安装 02-python入门之变量和基本数据类型 03-python内存管理之垃圾 ...

  3. 【简说Python WEB】flask-mail电子邮件

    目录 flask-mail flask shell发送邮件 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6 ...

  4. MySQL数据备份与恢复(二) -- xtrabackup工具

    上一篇介绍了逻辑备份工具mysqldump,本文将通过应用更为普遍的物理备份工具xtrabackup来演示数据备份及恢复的第二篇内容. 1.  xtrabackup 工具的安装 1.1  安装依赖包 ...

  5. [SQL]3.26--175+176+177+178+180+181+182

    175.组合两个表 题目 Code SELECT FirstName, LastName, City, State FROM Person LEFT JOIN Address --由于需要Person ...

  6. ASP.NET Core 3.x 中间件流程与路由体系

    中间件分类 ASP.NET Core 中间件的配置方法可以分为以上三种,对应的Helper方法分别是:Run(), Use(), Map(). Run(),使用Run调用中间件的时候,会直接返回一个响 ...

  7. CF1327C Game with Chips 题解

    原题链接 简要题意: 每个点有起始目标和终点(二维).要求每次将所有点向一个方向移动一次(四方向,若出界则不变),使得每个点均 经过 其终点. 本题只要抓住本质,瞬间得解. 你会发现,如果要求每个点最 ...

  8. python之面向对象三大特性: 继承(单继承)

    什么是继承 专业角度: B 继承 A类, B就叫做A的子类,派生类, A叫做B的父类,基类,超类. B类以及B类的对象使用A类的所有的属性以及方法. 字面意思: 继承就是继承父母所有的资产 class ...

  9. windows10远程桌面,出现“出现身份验证错误 要求的函数不受支持...”等错误解决方法

    windows家庭普通版,更新补丁后无法远程连接windows server2012,出现以下报错: 解决方法: 1.win + R打开运行,输入 regedit,回车进入注册表 2.找到以下路径 \ ...

  10. coding++:java-Date日期转换工具类

    Code: package com.tree.ztree_demo.utils; import org.springframework.util.ObjectUtils; import java.te ...