微信接口之H5分享功能

微信公众号H5分享功能升级指南:从废弃接口到新版JS-SDK的平滑迁移 本文详细介绍了微信公众号H5分享功能从废弃接口到新版JS-SDK的平滑迁移指南。通过分析接口变更背景、迁移准备工作和分步骤实现方案,帮助开发者顺利完成升级,确保自定义分享功能在微信生态中的稳定运行。文章还提供了常见问题解决方案和高级优化技巧,助力提升用户体验。 阅读详情

最近忙了好久,也好久没有写点什么,总算抽出点时间可以来csdn看看。顺便把微信分享的功能写一点心得。

微信H5分享就是我们写的一个H5页面,可以是html、亦可以是其他动态类型的页面,对于我来说微信分享不是第一次做了,之前以为只可以在非html页面中加,后来仔细一想那我们的ajax干嘛去啦。

下面我就具体说一下静态页面和非静态页面怎么实现微信还H5分享。

非静态:这个好说了,我们只需要在当前页面的onload中获取Token和ticket,把微信分享接口需要的签名apikey什么的做一个全局变量取到值然后在页面前端调用就好了。一开始感觉这种方法确实方便,但是这种方法如果你有一个页面分享你需要写一遍,有几个页面就需要写几遍。

静态:个人建议不论是什么样子的页面都按照静态方式调取微信接口,拓展性比较好。

首先引用微信JS <script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>,这个js版本一直在更新。

        var appId;微信公众号appid
        var timestamp;时间戳自己生成
        var nonceStr;随机字符串自己定义
        var signature;签名自己生成(重要)

这四个是我们调用微信js需要的参数,上面除了签名之外其他都好说,最重要是这个签名的生成:

public void signature(string currurl)
        {
            appid = vhcar.Appid;
            noncestr = "123456";
            timestamp = GenerateTimeStamp(DateTime.Now);
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", vhcar.Jsapi_ticket, noncestr, timestamp, currurl);
            //SHA1签名千万不要弄错
            sign = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sb.ToString(), "SHA1");
        }

生成签名的这个规则不要弄错,另外拼接的stringbuilder参数

1.access_token,这里需要注意,微信有两个token,一个是access_token,一个是token,我们这里需要的是access_token

2.ticket,这个是根据上面的access_token来获取的,所以如果accesstoken获取有问题的话这个就绝对有问题。

3.currurl,当前页面的链接地址,注意一定是当前页面在外网的链接地址。而且是完整的地址,就是你在微信打开你需要分享的页面复制链接后看到的地址是什么,这里就必须是什么。否则会一直提示签名出错。这里我的currurl是用js获取当前页面的链接传过来。可以用于参考。

获取token:

private void GetToken()
        {
            try
            {
                //获取access_token
                string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + vhcar.Appid + "&secret=" + vhcar.Appsecret;
                System.Net.HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
                //myReq.Method = "POST";
                HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
                StreamReader myStream = new StreamReader(myResp.GetResponseStream(), enc);
                string ret = myStream.ReadToEnd();
                //ret = str.Trim();
                string access_token = ret.Substring(ret.IndexOf("access_token\":\"") + 15, ret.IndexOf("\",\"") - ret.IndexOf("access_token\":\"") - 15);
                vhcar.Token = access_token;
                vhcar.Time = DateTime.Now;
            }
            catch (Exception)
            {
                vhcar.Token = null;
            }
        }

 private void GetTicket()
        {
            try
            {
                //获取access_token
                string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + vhcar.Token + "&type=jsapi";
                System.Net.HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
                //myReq.Method = "POST";
                HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
                StreamReader myStream = new StreamReader(myResp.GetResponseStream(), enc);
                string ret = myStream.ReadToEnd();
                //ret = str.Trim();
                string jsapi_ticket = ret.Substring(ret.IndexOf("ticket\":\"") + 9, ret.LastIndexOf("\",\"") - ret.IndexOf("ticket\":\"") - 9);
                vhcar.Jsapi_ticket = jsapi_ticket;
                vhcar.J_time = DateTime.Now;
            }
            catch (Exception)
            {
                vhcar.Token = null;
                vhcar.Jsapi_ticket = null;
            }
        }

获取时间戳:

 public string GenerateTimeStamp(DateTime dt)
        {
            // Default implementation of UNIX time of the current UTC time  
            TimeSpan ts = dt.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }

下面是js部分,主要是获取后台的几个参数,然后调用微信的几个js接口方法即可。

var test = window.location.href;

$.ajax({
                type: "POST",
                url: "/DoVChar/GetVCharAbout",
                data: { "uid": +uid, "currurl": test },
                success: function (msg) {
                    var arr = new Array();
                    arr = msg.split(',');
                    appId = arr[0];
                    timestamp = arr[1];
                    nonceStr = arr[2];
                    signature = arr[3];
                    

                    wx.config({
                        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                        appId: appId, // 必填,公众号的唯一标识
                        timestamp: timestamp, // 必填,生成签名的时间戳
                        nonceStr: nonceStr, // 必填,生成签名的随机串
                        signature: signature, // 必填,签名,见附录1
                        jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'hideAllNonBaseMenuItem', 'showMenuItems', 'closeWindow'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                    });
                    wx.ready(function () {
                        //wx.hideAllNonBaseMenuItem();
                        wx.showMenuItems({
                            menuList: ['menuItem:share:appMessage', 'menuItem:share:timeline'] // 要显示的菜单项,所有menu项见附录3
                        });
                        //分享到朋友圈
                        wx.onMenuShareTimeline({
                            title: '$20在线中文课,免费体验!', // 分享标题

                            link: 'https://www.koalaknow.com/VCharClassic.html?uid='+uid, // 分享链接
                            imgUrl: 'https://www.koalaknow.com/img/VcharImg/vcharlogo.png', // 分享图标

                            success: function () {
                                // 用户确认分享后执行的回调函数
                            },
                            cancel: function () {
                                // 用户取消分享后执行的回调函数
                            }
                        });
                        //分享给朋友
                        wx.onMenuShareAppMessage({
                            title: '$20在线中文课,免费体验!', // 分享标题
                            desc: '专业老师,专属课程,爱上“动起来”的中文', // 分享描述

                            link: 'https://www.koalaknow.com/VCharClassic.html?uid='+uid, // 分享链接

                            imgUrl: 'https://www.koalaknow.com/img/VcharImg/vcharlogo.png', // 分享图标

                            type: '', // 分享类型,music、video或link,不填默认为link
                            dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                            success: function () {
                                // 用户确认分享后执行的回调函数
                            },
                            cancel: function () {
                                // 用户取消分享后执行的回调函数
                            }
                        });
                        wx.error(function (res) {
                            // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
                        });
                    });

                }
            })
        })

 

 

微信JS SDK介绍及Android开放接口详解 通过微信JS SDK和Android开放接口,开发者可以在网页和Android应用中实现丰富的微信功能,提升用户体验和扩展应用的功能。本文将详细介绍微信JS SDK的使用方法,并重点关注在Android平台上的开放接口。微信JS SDK是微信公众平台提供的一种开发工具,用于在网页中实现与微信客户端的交互。开发者可以借助微信JS SDK实现微信分享、微信支付、扫一扫等功能,提升用户体验和功能扩展。除了在网页中使用微信JS SDK外,开发者还可以在Android平台上使用微信开放接口实现更多功能。 阅读详情

相关推荐

C++总结笔记

/ ++操作 这是因为定义的数组,申请的是连续的内存空间,当ptr++(ptr是int类型的指针变量),地址空间向后偏移是以int类型的大小为单位进行偏移的,相当于int类型数组元素的向后偏移。使用场景:它是最通用的转换形式,用于将一种类型转换为另一种类型,例如基本数据类型的转换(如 float 转 int),指向基类的指针或引用转为指向派生类的指针或引用等。在派生类被调用时会调用派生类中的函数,不会调用基类中的被重写的函数(基类中的函数需要加上virtual才可以,即基类中的函数是虚函数)。

weixin_50890461的博客 5233

微信公众号之分享接口

当我们点击右上角的三个点,就会有默认的分享分享后的卡片如下。

youhebuke225的博客 3122

星网锐捷语音网关密码重置全攻略:两种高效恢复出厂设置方法详解

本文详细解析了星网锐捷语音网关密码重置的两种高效方法,包括通过eth1通用口和eth0管理口的操作步骤。针对不同型号设备,提供硬件连接、Web控制台登录及CRT工具使用的具体指南,帮助用户快速恢复出厂设置并重建语音环境配置。

weixin_28698059的博客 528

实现微信自定义分享(缩略图、标题、描述)

实现微信自定义分享(缩略图、标题、描述)

david_Xuan的博客 5543

STM32双ADC同步采样实战:FFT测量相位差的5个关键细节

本文深入探讨了利用STM32双ADC同步采样结合FFT算法精确测量信号相位差的实战技巧。文章聚焦五个关键细节:确保ADC时钟同源、优化DMA缓冲区设计、信号调理与窗函数选择、精确的相位提取与解缠绕,以及系统误差校准与验证。这些细节是提升相位差测量精度、确保系统稳定性的核心,尤其强调了STM32配置中易被忽视的时钟同步问题。

oauth7security的博客 594

别再手动更新Excel了!用Jira看板管理你的个人项目(附保姆级配置流程)

本文详细介绍了如何利用Jira看板替代Excel进行个人项目管理,提供从注册到配置的保姆级教程。通过极简看板模式、自动化规则和数据分析功能,帮助用户实现任务可视化、协作高效化和提醒自动化,大幅提升个人工作效率。特别适合需要管理复杂个人项目的用户。

weixin_42699679的博客 228

微信分享第三方连接(H5页面)自定义页面

微信分享第三方连接(H5页面)自定义页面

J_Lee 4500

matlab球面投影(二)

matlab球面投影,想做一个全景相机,不知道,要做成啥样,于是在MATLAB先仿真一下,看下是个啥样子 百度别人做的,复制下面的代码到MATLAB的命令串口下,,网上找了张全景图,可以是bmp,jpg,改程序就可以了 回车运行就可以看到结果。 复制下面代码时,下面的中文注释记得删除,MATLAB是会报错的, close all; clear all; clc [x,y,z]=sphere(50); A=imread('a.JPG'); //名字是自己命名的,记得改 B=warp(x,y,-z,

rjszcb的博客 3161

微信内置网页实现分享接口(PHP代码实例)

​ 微信内置网页实现分享接口权限仅用于微信认证订阅号和服务号使用,个人认证订阅号无法使用,详情请查阅微信公众号开发者文档。

weixin_38855466的博客 1077

uni-app - 实现全屏自适应且不变形背景大图,设置一张图片占满全屏(根据手机或电脑尺寸自动拉伸背景图像),用于页面是一张平铺的大图做背景的情况,全端兼容

uni-app,vue.js,微信小程序-设置背景图自适应手机屏幕尺寸,页面中的背景图片高度和宽度自适应,UNI-APP里如何设置背景图自适应手机屏幕尺寸,如何实现一个图片铺满整个页面,并且可以根据用户机型进行自动修正,自适应背景大图片官方教程,一个页面如何将图像放到背景上,纯CSS实现,设置背景图片占满全屏,3种CSS实现背景图片全屏铺满自适应的方式,uni-app中如何让图片不带高度的自适应,兼容uni-app全端,支持【纯】微信小程序项目使用,uni-app-实现全屏自适应且不变形背景大图

🏆 前端领域优质创作者 1万+

WPF实现圆形菜单动态展开折叠效果

实现效果如下: 思路:根据子菜单个数计算旋转角度动态生成子菜单,并设置展开折叠动画。 步骤: 1、自定义按钮MyButton,建立展示图像属性DisplayImage public class MyButton : Button { public static readonly DependencyProperty DisplayImageProperty = DependencyProperty.Register("DisplayImage", typeof(

dnazhd的博客 3149

告别复杂开发:wechat.js让微信JS接口集成变得简单高效

在微信生态开发中,你是否曾为繁琐的JS接口调用而头疼?wechat.js正是为了解决这个问题而生的轻量级JavaScript库,它让微信分享、网络检测和菜单控制变得异常简单。作为一款专注于简化微信JS接口集成的工具,wechat.js通过统一的API设计,帮助开发者快速实现微信内置浏览器的各种功能。 ## 📱 为什么需要wechat.js? 微信内置浏览器提供了丰富的JS接口,但原生的调用方

gitblog_00044的博客 501

TriCore架构-如何将系统刷成HSM

本文介绍了芯片刷写操作流程:首先加载project_Merge.s19文件,进入UCB界面展开BMHD0_ORIG和BMHD1_ORIG。重点说明需要将STAD地址从原始值A0000000修改为0XA00A0000,并详细描述了编辑、更新和写入芯片的步骤。最后提示在HSM刷写过程中如遇错误可能需要输入密码。该操作涉及关键地址修改,需谨慎执行。

xiandang8023的博客 95

微信H5分享到朋友圈,转发朋友功能随记

最近刚做了一个微信公众号H5项目,里面包含一个分享到朋友圈和分享给好友的功能。配置白名单以及公众号js安全域名这些就不赘述了,接下来简单介绍下实现这个功能的几个前端步骤 因为是微信网页开发,项目里如果有用到一些分享,音频,视频的功能就必须接入它的SDK工具包,详情可以到官方文档里看一下 第一步 绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口权限。 第二步 引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持ht

ZhaoQM_script的博客 3459

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

微信H5分享神器:一键实现多功能集成

微信H5分享神器:一键实现多功能集成 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在移动互联网时代,微信已成为不可或缺的社交平台。为了更好地利用微信的社交属性,开发者们不断探索如何在微信内置浏览器中实现更丰富的功能。本项目“微信H5分享 下载jssdk文件”正是为此而生,它提供了一套完整的微信JS-SDK文件,帮助开发者轻松实现H5页面的微信分享功能,并集成多种微信...

gitblog_06512的博客 376

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

vue/react-h5中实现分享按钮点击分享微信好友/朋友圈(包含当前是否为微信浏览器判断)

在h5项目开发中 往往会有分享功能 将当前页面变为一个小卡片进行分享 若直接点击右上角的三个点进行分享 分享出去的只是一个当前路径 而不是卡片形式 当然分享的前提是你要使用微信浏览器去打开当前页面。

旭久的博客 1709

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

mui实现分享功能_如何实现分享功能

首先我们公司的项目用的是H5,今天有说让实现微信,朋友圈,QQ,空间等分享功能,于是在网上找了很多资料,一开始发现网上都说的迷迷糊糊的,自己一脸懵。而且产品还给我推荐了一个地址,让我参考移动端H5多平台分享实践​juejin.im(其实这个写的挺好的),同时我也参考了微信开发平台的分享功能微信开发平台​mp.weixin.qq.com总结:H5无法实现直接调用手机App并实现分享功能,如果你想自定...

weixin_39582569的博客 156

vue+h5+js-sdk 实现分享的功能(分享至好友/朋友圈)

用户在h5 页面中实现微信的分享至好友、分享至朋友圈的功能、且实现的方式为卡片的形式(附带效果图、踩过的坑、注意事项)

Missbelover的博客 6805

H5:微信分享接入及避坑记录

前言 项目中经常有这样的需求,某个页面需要分享到微信好友或朋友圈。在app中,可以通过接入sdk,调用sdk的方法实现分享。在H5中实现微信分享也是需要借助sdk。 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力。 不过在接入微信js-sdk之前,类似app注册应用账号一样,需要做些前置的准备工作。 此处贴一.

KWMax 2594

微信JS-SDK updateAppMessageShareData安卓不能自定义分享

最近开发一个项目时,有微信H5网页自定义分享功能,使用了微信JS-SDK的分享到好友和分享到朋友圈功能。 微信开发文档这样写的 自定义“分享给朋友”及“分享到QQ”按钮的分享内容(1.4.0) wx.ready(function () { //需在用户可能点击分享按钮前就先调用 wx.updateAppMessageShareData({ title: '', // 分享标题 desc: ''...

Mangojjx的博客 6739

微信公众号H5自定义分享功能升级指南:从废弃接口到新API迁移

本文详细解析了微信公众号H5自定义分享功能从废弃接口向新API迁移的完整指南。核心在于理解微信分享的缓存机制,并掌握新旧接口的本质区别:从事件监听变为主动设置,且支持动态更新。文章提供了手把手的代码迁移示例、针对单页面应用的动态分享策略,以及实用的调试技巧与常见问题排查方法,帮助开发者确保分享卡片稳定生效。

weixin_29000991的博客 422

实现H5页面微信分享功能

实现H5页面微信分享功能 一.通过微信打开的H5页面实现微信分享功能 首先在公众号管理后台“公众号设置”的“功能设置”里填写JS接口安全域名,域名需要通过ICP备案,没有备案域名可以用SAE、BAE等平台。此外,自定义分享功能需要通过微信认证才能使用,没有认证的可以跟关系好的朋友借用权限,在他的JS接口安全域名设置这里填上你的域名和共享同一个开发者ID。 在需要调用JS接口的页面引入微信JSSDK的JS文件:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js,这个

weixin_46063007的博客 5621

微信内置浏览器 H5分享功能(前端)

微信内置浏览器 H5分享功能(全代码)

MakeingFuture的博客 1230

uniapp中针对H5端做微信分享功能总结

我已经封装好了在uniapp里分享的代码,非常方便好用,有需要的朋友可以去下载 下面我说一下使用步骤 第一,下载代码jweixin.js和wechatshare.js存放项目位置:项目的common文件夹下 第二,需要在wechatshare.js的initJssdk方法里配置一下后端签名验证地址,如果需要后端签名验证代码,请移步这里下载 第三 在main.js里定义一下全局变量,这样任何页面都可以使用分享方法,很方便 // #ifdef H5 import wechat..

xiaopzi的博客 1万+

h5微信自定义分享(前端+后端<java>)

为推广宣传使用,需要做一个简单h5页面在微信中分享宣传,实现过程中遇到一些问题在此总计如下: 前端代码 获取分享页面地址,根据地址请求后端接口,获取页面分享所需的必要参数; 关于“jweixin.js”,网上很多博主都是引用的“< script src=‘https://res.wx.qq.com/open/js/jweixin-1.0.0.js’></ script >”...

稻草人 2万+

vue 封装微信分享

/*----------------------------share.js----------------------------*/ import wx from 'weixin-js-sdk' import qs from 'qs' import {Toast} from 'mint-ui' import axios from "axios"; axios.defaults.header...

qq_41093007的博客 866
上一篇: 新服务器sqlserver远程访问配置
下一篇: .net webservice 在js调用跨域问题
大道初修通九窍
博客等级 码龄15年 7粉丝 20原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值