H5打开小程序

H5打开小程序 分为普通浏览器-和微信浏览器

在这个之前必须要满足

公众号

  1. 已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转任意合法合规的小程序。
  2. 已认证的非个人主体的小程序,使用小程序云开发的静态网站托管绑定的域名下的网页,可以使用此标签跳转任意合法合规的小程序。

普通浏览器
1、获取小程序scheme码,适用于短信、邮件、外部网页等拉起小程序的业务场景。通过该接口,可以选择生成到期失效和永久有效的小程序码,目前仅针对国内非个人主体的小程序开放

H5打开小程序 普通浏览器

使用微信开放的urlscheme.generate生成小程序scheme码 使用这个之前需要先获取到接口调用凭证拿到access_token

常见错误

/* 普通浏览器--这个放在前端请求也是可以的-不过不建议 */

          const appid = '小程序appid';
            const secret = '小程序secret ';
          //获取access_token
            const {data:{access_token}} = await axios.request({
                  url:`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`
            })
            
            //获取scheme
            const {data:{openlink}} = await axios.post("https://api.weixin.qq.com/wxa/generatescheme?access_token="+access_token,{
                  "jump_wxa" : {
                        "path" : "/pages/index/index",
                        "query" : "dex=2"
                  }
            })

          //openlink就是scheme
            console.log(openlink);

          然后使用weixin://dl/business/?t= openlink
          直接使用location.href = 'weixin://dl/business/?t= openlink'
          或者创建一个a标签,get事件也是可以的

微信公众号 --这个就必须要服务器了

普通浏览器的相对公众号还是比较简单的,公众号还要使用jssdk还要配置sdk-还要配置服务器,
官方文档

配置好服务器的可以跳过直接看下面
1、先要配置-进入公众号-开发-基本配置-服务器配置-启用填好资料,
当然你也可以选择明文模式
查看示例
2、保存的时候会请求校验服务器-请求上面写的URL

//加密模块
import crypto from 'crypto';
//加密方法
function signFn(arr:Array<string>){
      const sha1  = crypto.createHash('sha1');//sha1
      var str=arr.sort().join('');
      sha1.update(encodeURI(str));//添加需要的加密数据
      return sha1.digest('hex');//加密,(hex表示16进制)
  }

//--[token,传过来的时间戳,传过来的随机字符串]
var obj=['1839a5f3b7feba22a6e2a6ef1467d348',this.get('timestamp'),this.get('nonce')];
            //进行加密
            var sign=signFn(obj);
            console.log(this.get('signature'));
            //对比加密
            if(sign === this.get('signature')){
                  return this.body = this.get('echostr');
            }
            return this.body = 'error';

配置好之后就需要写获取jssdk然后配置jssdk

//服务器端代码
import crypto from 'crypto';

const appid = '公众号appid';
const secret = '公众号secret';

//服务器当前时间
 const timestamp = parseInt(String(new Date().getTime()));
//随机字符串
const nonceStr = 'Wm3WZYTPz0wzccnW';
//加密方式
const sha2  = crypto.createHash('sha1');//sha1
 
//获取access_token
const {data:{access_token}} = await axios.request({
          url:"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret;
 })

//获取api ticket
const {data:{ticket}} = await axios.request({
           url:"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_token+"&type=jsapi"
})
   //需要当前验证的页面路径
const reUrl = this.post('url');
            
if(reUrl)
{
  //加密方式依次为ticket 随机字符串noncestr 时间戳timestamp 验证的页面url
      const content = `jsapi_ticket=${ticket}&noncestr=${nonceStr}&timestamp=${timestamp}&url=${url}`;
                  //加密
      const signature = sha2.update(content).digest('hex')
    //返回给前端
      return this.json({
             appid,
             timestamp,
             signature,
             nonceStr
         })
 }

//前端代码 -js
安装jssdk(npm install weixin-js-sdk --S) 或者直接[cnds](https://res.wx.qq.com/open/js/jweixin-1.6.0.js)
const get =  async function(){
              //请求上面写好的接口
                const response = await fetch('jssdk路径',{
                        method:"post",
                        headers: {
                              "Content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                        },
                        body:`url=${location.href.split('#')[0]}`
                  })
                //返回的数据
                  const {data} = await response.json();
                  wx.config({
                        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                        appId: data.appid, // 必填,公众号的唯一标识
                        timestamp: data.timestamp, // 必填,生成签名的时间戳
                        nonceStr: data.noncestr, // 必填,生成签名的随机串
                        signature: data.signature,// 必填,签名
                        jsApiList: ['checkJsApi'], // 必填,需要使用的JS接口列表
                        openTagList: ['wx-open-launch-weapp'],   //这里一定要写上wx-open-launch-weapp 不写就不会出现
                  });
//走这个回调的时候说明注入成功了
wx.ready(function(){})  
//这里就肯定失败了
wx.error(function(){})
            }
get();

//html代码
//path小程序的页面路径-一定要加上.html
//这个只会在微信浏览器里面而且jssdk注入成功才会显示
<wx-open-launch-weapp id="launch-btn" class="launch-weapp" username="小程序原始id  gh_开头的" path="/pages/guide/main.html">
                  <script type="text/wxtag-template">
                                             //样式,只能写在这里面外面不生效
                        <style>.btn { padding: 12px }</style>
                        <button class="btn">打开小程序1</button>
                  </script>
            </wx-open-launch-weapp>

我总结了以下几点不显示的问题
1、个人账号 -- 没办法
2、签名错误 -- 校验签名 看看access_token 是否获取成功 看看ticket是否获取成功 失败一个都会签名错误 签名请求一定要带上url
3、域名错误 -- 没有设置安全域名-在设置-公众号设置-功能设置里面
4、IP白名单 -- 把服务器ip加入到 ip白名单里面即可
5、vue里面会报错wx-open-launch-weapp 标签未注册 --
···· 1在main.js添加Vue.config.ignoredElements = ['wx-open-launch-weapp']
···· 手动拼接用v-html显示

this.wxOpenWeApp = `
        <wx-open-launch-weapp id="launch-btn" class="launch-weapp" username="小程序原始id  gh_开头的" path="${path}">
            <script type="text/wxtag-template">
                <style>
                    .close-btn{
                        border: none;
                        outline: none;
                        padding: 10px 20px;
                        line-height: 1;
                    }
                </style>
                <button class="close-btn">
                    打开小程序
                </button>
            <\/script>
        </wx-open-launch-weapp>`

老规矩,个人的不会显示
必须是已认证的服务号

推荐一个移动端开发利器 vconsole

建议再开发环境使用--生成环境当然也可以使用-可以使用特定参数进入的方式 比如带参debug=xx
使用方法也简单 new Vconsole()
npm cdns 都可以
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容