【微信 JS-SDK开发实战】好友分享开发

微信公众号:weixin-js-sdk使用总结 JS-SDK说明文档 网页授权说明文档 微信公众号授权登录参考方案 1、安装weixin-js-sdk npm install weixin-js-sdk 2、js封装 import wx from 'weixin-js-sdk' // 步骤1、引入微信js-sdk import http from '@/utils/axios.js'; //接口请求封装 // 1、wx.config配置参数 const getWxConfig = async (pageUrl) => { await 阅读详情

文章目录


前言

纪录一个微信页面好友分享的开发过程,从 API 文档开始,到后端签名算法的实现,再到最终的效果呈现,开发过程中遇到的 BUG,做一次完整的纪录。


一、官方文档

一切的开始从官方文档开始,321 上链接:

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#10

二、使用基本步骤

总而言之分为 5 个步骤,官档已经很描述的非常清晰,动手能力强的小伙伴们可以先退下了~😄

下面是实施的过程:

1.绑定域名

在公众号后台完成域名设置

2.引入JS文件

    <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

3.通过config接口注入权限验证配置

  • 这里用的是 Ajax 请求配置(记得关闭异步);
  • 要传当前页面的 url(不然签名会失败);
  • wx.config 配置好相关参数;
  • jsApiList根据自己需要配置就好;
        var config;
        // 获取当前页面的 url
        var url = window.location.href;
         // 通过请求方式获取签名
         $.ajax({
            type: 'GET',
            url: 'https://mjjz.gde3f.com/api/weixin?url=' + url, 
            async:false,
            // data: $(obj).serialize(),
    // 		dataType: "json", 
            success: function (ret) {
                let s1 = ret.split('(')[1].split(')')[0]
			    config = JSON.parse(s1)
            }
        }) 
        console.log(config)

        wx.config({
          debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          appId: config.appId, // 必填,公众号的唯一标识
          timestamp: config.timestamp, // 必填,生成签名的时间戳
          nonceStr: config.nonceStr, // 必填,生成签名的随机串
          signature: config.signature,// 必填,签名
          jsApiList: [
                'updateAppMessageShareData',//分享到朋友圈
    			'updateTimelineShareData',//分享给好友
    			] // 必填,需要使用的JS接口列表
        });

4、通过ready接口处理成功验证

  • 设置好标题、描述、图片、跳转链接
  • 跳转链接一定是公众号后台设置好的可信域名!
          // 配置自定义分享内容
        wx.ready(function () {   //需在用户可能点击分享按钮前就先调用
            const shareData = { 
                title: '微信分享测试', // 分享标题
                desc: '2024/8/18-21 东莞厚街·广东现代国际展览中心', // 分享描述
                link: 'https://mjjz.gde3f.com/html/M52/dist/#/wxshare', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: 'https://mjjz.gde3f.com/html/M52/wx_logo2.png', // 分享图标
                success: function () {
                  // 设置成功
    		        console.log(666)
                }
            }
          wx.updateAppMessageShareData(shareData);
          wx.updateTimelineShareData(shareData);
        });

tips:调试用微信开发者工具---公众号网页项目

到目前为止,可以实现的效果,不报错就证明成功了 80%了;

5、后端签名算法(PHP)

只作参考,跟对接企微的 sdk 一毛一样,不再赘述了。

<?php
$url = $_GET['url'];
class JSSDK {
  private $appId;
  private $appSecret;
  private $url;
  public function __construct($appId, $appSecret,$url) {
    $this->appId = $appId;
    $this->appSecret = $appSecret;
$this->url = $url;
  }

  public function getSignPackage() {
    $jsapiTicket = $this->getJsApiTicket();
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
   // $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$url =$this->url;
    $timestamp = time();
    $nonceStr = $this->createNonceStr();

    // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
    $signature = sha1($string);
    $signPackage = array(
      "appId"     => $this->appId,
      "nonceStr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature,
      "rawString" => $string
    );
    return $signPackage; 
  }

  private function createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
  }

  private function getJsApiTicket() {
    // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
    $data = json_decode(file_get_contents("jsapi_ticket.json"));
    if ($data->expire_time < time() || empty($data)) {
      $accessToken = $this->getAccessToken();
      // 如果是企业号用以下 URL 获取 ticket
      // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
      $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
      $res = json_decode($this->httpGet($url));
      $ticket = $res->ticket;
    // P($res);exit;
      if ($ticket) {
        $data->expire_time = time() + 7000;
        $data->jsapi_ticket = $ticket;
        $fp = fopen("jsapi_ticket.json", "w");
        fwrite($fp, json_encode($data));
        fclose($fp);
      }
    } else {
      $ticket = $data->jsapi_ticket;
    }

    return $ticket;
  }

  private function getAccessToken() {
    // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
    $data = json_decode(file_get_contents("access_token.json"));
    if ($data->expire_time < time() || empty($data)) {
      // 如果是企业号用以下URL获取access_token
      // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
      $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
      $res = json_decode($this->httpGet($url));
      $access_token = $res->access_token;
    //   P($res);exit;
      if ($access_token) {
        $data->expire_time = time() + 7000;
        $data->access_token = $access_token;
        $fp = fopen("access_token.json", "w");
        fwrite($fp, json_encode($data));
        fclose($fp);
      }
    } else {
      $access_token = $data->access_token;
    }
    return $access_token;
  }

  private function httpGet($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_URL, $url);
    $res = curl_exec($curl);
    curl_close($curl);
    return $res;
  }
}

$this->appid = get_config('wx_appid');
$this->secret = get_config('wx_secret');

if($this->appid == '' || $this->secret == ''){
	showmsg('请先配置微信AppID和AppSecret!', U('config/index'));
}
		
$jssdk = new JSSDK($this->appid, $this->secret,$_GET['url']);//按照自己的公众号填写
$signPackage = $jssdk->GetSignPackage();
$tmp=json_encode(array ('appId'=>$signPackage["appId"],'timestamp'=>$signPackage["timestamp"],'nonceStr'=>$signPackage["nonceStr"],'signature'=>$signPackage["signature"],'url'=>$signPackage["url"]));
$callback = $_GET['callback'];
echo $callback.'('.$tmp.')';
exit;
?>

6、实际使用

这点稍微注意一下,把做好的链接生成二维码

扫码分享给好友,效果:


总结

以上就是实现微信好友分享的全过程,欢迎大家查漏补缺。

h5接微信js-sdk的详细步骤 h5页面接入js-sdk 阅读详情

相关推荐

调用微信 JSSDK 接口,实现微信登录、自定义分享、支付功能

4、通过支付核心参数调用 wx.requestPayment() 发起支付。1、通过wx.login()获取code、调用后端接口获取openid;2、调用后端接口创建订单,获取orderId;3、调用后端接口获取支付核心参数,预支付;以微信小程序支付为例。

前端博客典中典 706

weixin-js-sdk使用

注意:以下内容自身的项目为uniapp编译生成微信小程序。小程序内嵌webview。 一、微信初始化 安装微信sdk npm install weixin-js-sdk --save 页面引入 import wx from "weixin-js-sdk"; 微信初始化 wx.config({ debug: false, // 开启调试模式, appId: data.appId, //必填,企业号的唯一标识,此处企业号corpid timestamp: data.t.

weixin_46656983的博客 1万+

VUE使用JS-SDK实现微信分享好友功能(通过点击控件触发)

微信JSSDK官方开发文档 微信分享有很多种 这里只记录了分享好友功能 1、通过npm安装微信的js-sdk npm install weixin-js-sdk 2、在main.js里引用或在需要分享的页面引用 import wx from 'weixin-js-sdk'; 3、在页面创建时候先注入配置信息(必须)! //生命周期我就创建了 created() { var...

qq_34007408的博客 2984

微信公众号JS-SDK使用

微信JS-SDK使用,wxjava使用

tomos428的博客 3533

h5页面调用微信JS-SDK分享到微信好友或者朋友圈的配置

1.引入js &lt;script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"&gt;&lt;/script&gt; 2.在页面添加配置 &lt;script type="text/javascript"&gt; var url = location.href..

tiantiandashi的博客 2万+

H5微信分享好友、朋友圈方法

H5微信分享好友、朋友圈方法分享接口附录1-JS-SDK使用权限签名算法 步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口权限。 步骤二:引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js ...

weixin_42733699的博客 1959

vue分享至qq空间,新浪微博,微信朋友圈及微信好友

vue分享至qq空间,新浪微博,微信朋友圈及微信好友 本博客主要针对pc网页版分享,移动端相似之处不做参考 关于分享,对于分享到qq空间、好友及新浪微博比较简单,给一个点击事件调用一下官方接口就可以了,自己绑定一些标题、链接、图片内容就可以了 分享到qq空间及好友 qq空间: https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?u...

weixin_44868881的博客 5536

h5页面调用微信JS-SDK分享到微信好友或者朋友圈的配置(h5页面嵌入小程序中)

前言:h5嵌入小程序中点击h5页面中的分享按钮调用微信小程序分享功能,需要调用微信JSSDK方法来实现。 步骤: 1.引入微信JSSDK,通过script标签,引入微信官网的JS-SDK文件。 <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> 2.在页面中添加配置 <script type="text/javascript">

weixin_42342065的博客 1742

一个PHP文件实现JS-SDK新版微信分享朋友圈,分享给好友功能

前言 现在网上很多关于js-sdk的文章,一搜到处都是,并且有很多不同的实现方法,解决方案,但是均已失效,因为以前的1.0版、1.4版接口都已经丢弃了。 现在已经进入1.6版接口,我们除了要引用jweixin-1.6.0.js之外,还要使用最新的API。 之前的版本是有分享成功、取消分享、分享失败的回调函数的,现在为了防止这个接口的滥用,已经取消了回调,无法检测是否已经分享成功了。 新版...

weixin_35938424的博客 961

Linux下Linpack测试GPU和CPU性能

前面的文章已经介绍了如何搭建Linpack环境:https://blog.csdn.net/liu_feng_zi_/article/details/107429720 接下来说明如何使用 一、编写运行脚本: 新建文件:run_linpack.sh,内容如下: export HPL_DIR =/root/LHC/Linpack/hpl-2.0_FERMI_v15 export MKL_NUM_THREADS=6 export OMP_NUM_THREADS=6 export MKL_DYNAMI.

liu_feng_zi_的专栏 4631

【RDMA】13. RDMA之用户态与内核态交互

原文:https://zhuanlan.zhihu.com/p/346708569 在“RDMA之Verbs”一文中我们说道,Verbs API分为用户态和内核态,分别以ibv_和ib_作为前缀。RDMA技术的最大的优势就在于用户态可以绕过内核,直接控制硬件收发数据,减少了系统调用和内存拷贝次数,所以大部分的RDMA应用都是用户态应用,即使用以ibv_为前缀的用户态Verbs API。 但是并非所有的用户态Verbs API都可以完全绕开内核,本文中我来讲解一下哪些API依赖于内核RDMA子系统(包括驱

我的笔记本 4277

微信公众号开发中分享功能 分享微信朋友圈/微信好友

微信公众号中经常遇到的问题就是分享链接到微信朋友圈 微信好友一类的需求。 下边走一下需要操作的流程 1.首先再项目中(一般就放到自己的公共文件中引入即可,vue中引入到index.html中)引入微信js 链接。 目前最高版本应该是1.4.0 <script type="text/JavaScript" src="http://res.wx.qq.com/open/js/jweixin-1....

MtangEr的博客 4008

Qt Creator设计器里也能拖拽?5步将你的QML自定义控件变成可视化插件(Qt6.5+)

本文详细介绍了如何在Qt Creator设计器中实现QML自定义控件的可视化拖拽功能(Qt6.5+)。通过5个步骤,从构建可插件化的QML控件基础到部署插件到设计器环境,帮助开发者将自定义控件转化为设计器插件,提升团队协作效率。特别适合需要频繁调整UI样式的开发场景。

weixin_29214559的博客 165

Vue实现微信分享好友,分享朋友圈。

实现微信分享功能。 1 、基于vue去实现在微信里去分享给你的微信好友,或者去分享到你的朋友圈里。如果是react 等等 一样用法。 2、目前实现微信分享功能是通过点击微信控件触发的,代码拿走直接用,因为分享出来的是一个有标题,有描述,有图标的一个类似连接,所以灵活使用,分享地址,分享图片,分享的话术等等根据各自的需求去写。 3、使用到微信官网的api 通过 npm i weixin-js-sdk 安装。 最好在项目的main.js里暴露出来。 html部分 <div class="box"

weixin_47679798的博客 1万+

保姆级教程:Synology NAS共享文件夹从创建到权限设置的完整流程

本文提供了一份详尽的Synology NAS共享文件夹创建与权限设置指南。重点讲解了如何将NAS接入企业AD域,并利用域管理员账户进行集中身份验证和权限管理。文章从基础概念、域环境配置、文件夹创建、精细化权限分配到客户端访问与维护,完整覆盖了构建安全高效企业级文件共享空间的全流程,旨在帮助管理员实现便捷的团队协作与数据安全管理。

u9v0w的博客 549

告别手动干预:深入浅出LPDDR5的Background ZQ校准与DVFSQ切换避坑指南

本文深入解析LPDDR5的Background ZQ校准与DVFSQ切换技术,帮助工程师实现DRAM阻抗校准的自动化管理。通过详细配置指南和实战案例,揭示如何避免动态电压调节下的模式切换陷阱,提升信号完整性和系统能效。特别适合嵌入式系统和移动终端开发者参考。

weixin_30329623的博客 444

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

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

Missbelover的博客 6797

uni-app - 最新实现将 uniapp 项目打包编译为 H5 网站,并上传部署到 web 服务器进行发布预览(从打包到发布完整流程步骤,Hbuilder 编译打包 h5 发行到 web 服务器)

uniapp,打包h5,打包编译H5网站,怎么打包h5,uniapp打包成H5部署到服务器教程,uniapp打包H5页面发布到服务器,uniapp开发,打包成H5部署到服务器_uniapp打包h5,uniapp如何打包h5项目,怎么把项目打包成H5,uniapp如何打包成H5并且放到web端上,打包成h5部署到服务器的步骤,打包发行到h5报错怎么办,如何将uniapp打包的h5网站放到服务器上,编译打包后怎么放到web服务器中,如何将uniapp开发的H5打包并部署到服务器,部署使用uniapp开发的h5

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

企业微信JS-SDK禁止分享功能

使用JS-SDK实现点击右上角,不能分享功能: function fenxiang(){ var index_url=location.href.split('#')[0];//url不能写死 $.ajax({ type : "get", ...

大海无量的博客 9597

基于 MATLAB 的 FastICA 算法实现语音信号盲分离

FastICA 算法通过最大化信号的非高斯性,找到独立成分,从而实现信号的分离。这些混合的信号被称为盲源信号,我们希望通过分析混合信号,将它们分离出来以便进行进一步的处理和分析。FastICA 是一种常用的盲源信号分离算法,它基于统计学原理,通过寻找独立成分来实现信号的分离。FastICA(独立成分分析)是一种常用的盲源信号分离算法,在语音和图像处理领域都有广泛的应用。本文将介绍如何使用 MATLAB 实现 FastICA 算法来实现语音信号的盲分离,并提供相应的源代码。FastICA 算法原理。

学习使你进步。 2021

2026年广东省职业院校技能大赛中职组“大数据应用与服务”样题一完整参考答案

2026年广东省职业院校技能大赛中职组“大数据应用与服务”样题一完整参考答案

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 724

uniapp在开发微信H5使用微信js-sdk记录

本文介绍了如何在uni-app中使用jweixin-module插件实现微信功能。该插件支持微信支付、分享、获取用户信息、扫码等功能。首先通过npm安装插件,然后在项目中封装wx-jssdk.js文件,提供初始化、支付、分享等基础方法。使用时导入封装模块,创建实例后即可调用相关功能。文中给出了具体代码示例和调用方法,并提供了微信官方文档链接供参考。

baidu_33927029的博客 1042

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

电脑版微信分享出现WECHAT_EMPTY_TITLE解决方案

电脑版微信分享出现WECHAT_EMPTY_TITLE是比较常见的问题。出现这个问题,主要原因在于代码里使用了JAVASCRIPT里的 document.title方法来获取标题。 异常代码如下: <script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js "></script> <script> url=encodeURIComponent(window.location.href);

星外客的专栏 5422

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

从0到1掌握wechat.js:构建功能完善的微信Web应用

wechat.js是一款专注于微信Web应用开发的JavaScript工具库,提供了分享、网络状态检测、菜单控制等核心功能,帮助开发者快速实现微信环境下的各类交互需求。无论是社交分享功能还是基础的界面控制,wechat.js都能提供简洁易用的API接口,让微信Web应用开发变得简单高效。 ## 📦 快速开始:安装与配置 ### 一键安装步骤 wechat.js支持通过bower包管理器进行

gitblog_00070的博客 774

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

H5页面在微信端的分享(分享到朋友圈,好友)

一、获取基本信息 找到已有公众号的appid,根据这个appid和url向后端发起请求,拿到配置所需要的参数:timestamp、noncestr和signature。 二、实现 1、页面引入JS-SDK文件 通过script标签,引入微信官网的JS-SDK文件 <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js...

mr~li的博客 4650
上一篇: 业务系统之间的信息同步(持续更新中)
下一篇: 记录一个 ios 微信好友分享打开是错误页面的问题
hj1043
博客等级 码龄12年 238粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值