jssdk.php on line 95,微信内H5使用JSSDK分享

最近一直有人问jssdk的问题,官方贴也太简单,没有说明。所以这里再写一篇简单教程,附有代码。其实这个sdk还是比较简单的,只是因为uni-app的h5端是SPA单页应用,所以容易出现签名错误,或者配置没有正确初始化的问题。

服务端计算签名

文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

引入JSSDK

推荐使用npm安装,参考 http://ask.dcloud.net.cn/article/35380

创建一个js文件,封装微信相关功能

笔者是放在common目录,文件名称是wechat.js代码如下:

复制代码import request from './request'; //笔者自己封装的网络请求类,也可以直接使用uni.request  var jweixin = require('jweixin-module');

export default {

//判断是否在微信中

isWechat:function(){

var ua = window.navigator.userAgent.toLowerCase();

if(ua.match(/micromessenger/i) == 'micromessenger'){

return true;

}else{

return false;

}

},

//初始化sdk配置

initJssdk:function(callback ,url){

//服务端进行签名 ,可使用uni.request替换。 签名算法请看文档

request.post('/api/oauth/wechat/sign',{url:url},function(res){

if(res.data){

jweixin.config({

debug: false,

appId: res.data.appId,

timestamp:res.data.timestamp,

nonceStr: res.data.nonceStr,

signature:res.data.signature,

jsApiList: [

'checkJsApi',

'onMenuShareTimeline',

'onMenuShareAppMessage'

]

});

//配置完成后,再执行分享等功能

if(callback){

callback(res.data);

}

}

});

},

//在需要自定义分享的页面中调用

share:function(data ,url){

url =url ? url :window.location.href;

if(!this.isWechat()){

return ;

}

//每次都需要重新初始化配置,才可以进行分享

this.initJssdk(function(signData){

jweixin.ready(function(){

var shareData = {

title: data&&data.title ? data.title: signData.site_name,

desc: data&&data.desc ? data.desc: signData.site_description,

link: url,

imgUrl: data&&data.img ?data.img :signData.site_logo,

success: function (res) {

//用户点击分享后的回调,这里可以进行统计,例如分享送金币之类的

request.post('/api/member/share');

},

cancel: function (res) {

}

};

//分享给朋友接口

jweixin.onMenuShareAppMessage(shareData);

//分享到朋友圈接口

jweixin.onMenuShareTimeline(shareData);

});

} ,url);

}

}

全局引用

在main.js中引入

复制代码// #ifdef H5  import wechat from './common/wechat'  if(wechat.isWechat()){

Vue.prototype.$wechat =wechat;

}

// #endif

在页面中调用

例如,在文章详情页面自定义分享内容。

复制代码// #ifdef H5  if (this.$wechat && this.$wechat.isWechat()) {

this.$wechat.share({

desc: article.title,

img: article.image

});

}

// #endif

注意事项

1 测试时,可以将debug设置为true,可以看到日志信息2 签名建议在服务端,签名的url必须和当前页面的url一致,否则自定义分享无效3 每个页面都需要单独初始化配置,即jweixin.config()4 在公众号后台设置安全域名5 笔者的例子是在history模式下,Android、IOS手机均已正常上线使用。若您使用的是hash模式,请自行测试,理论上应该也可以,如果有问题,请检查上述几点。如果还不行,请尝试在签名的事哈去掉url上的 '#'以后部分(含'#')6 如有遗漏或建议,欢迎下面留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我会用 PHP 写出完整的微信自定义分享的代码。 首先,你需要引入 jssdk.php 文件,这个文件包含了所有用来处理微信自定义分享的必要的函数和类。 你可以使用 require_once 或 include_once 来引入 jssdk.php 文件,例如: ``` require_once "jssdk.php"; ``` 然后,你需要实例化一个 JSSDK 类,并将必要的参数传入,例如: ``` $jssdk = new JSSDK("yourAppId", "yourAppSecret"); ``` 接着,你需要调用 JSSDK 类的 getSignPackage 方法来获取签名信息,例如: ``` $signPackage = $jssdk->getSignPackage(); ``` 最后,你可以使用以下代码来实现微信自定义分享: ``` <script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> <script> wx.config({ debug: true, appId: '<?php echo $signPackage["appId"];?>', timestamp: <?php echo $signPackage["timestamp"];?>, nonceStr: '<?php echo $signPackage["nonceStr"];?>', signature: '<?php echo $signPackage["signature"];?>', jsApiList: [ // 所有要调用的 API 都要加到这个列表中 'onMenuShareTimeline', 'onMenuShareAppMessage' ] }); wx.ready(function () { // 在这里调用 API wx.onMenuShareTimeline({ title: '分享标题', // 分享标题 link: '分享链接', // 分享链接,该链接域名或路径必须与当前页面对应的 ### 回答2: 首先,确保已经安装了PHP环境,并且具备使用微信的相关开发权限。 其次,创建一个名为jssdk.php的文件,用于引入微信的JS-SDK功能。以下是完整的代码示例: ```php <?php require_once "jssdk.php"; // 替换为自己的appid和appsecret $jssdk = new JSSDK("your_appid", "your_appsecret"); $signPackage = $jssdk->GetSignPackage(); $output = <<<EOF <script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> <script> wx.config({ debug: false, appId: '{$signPackage["appId"]}', timestamp: '{$signPackage["timestamp"]}', nonceStr: '{$signPackage["nonceStr"]}', signature: '{$signPackage["signature"]}', jsApiList: [ // 填入需要使用分享功能列表,如:'onMenuShareAppMessage', 'onMenuShareTimeline' ] }); </script> EOF; echo $output; ?> ``` 在上述代码中,我们首先引入了微信的JS-SDK文件,然后使用JSSDK类获取签名包信息,包括appId、timestamp、nonceStr和signature等。 在最后一段code里,我们使用wx.config方法来配置JS-SDK,其中需要填入自己的appId、timestamp、nonceStr和signature。在jsApiList中,填入需要使用分享功能(如onMenuShareAppMessage、onMenuShareTimeline等)。 最后,输出了整个代码字符串,此时在其他页面引入jssdk.php文件,就可以实现微信的自定义分享功能。 ### 回答3: 微信自定义分享功能可以通过调用微信官方提供的JavaScript SDK来实现。下面是一个用PHP写出完整代码的示例: 首先,我们需要引入微信jssdk.php 文件,该文件用于获取与签名相关的数据。可以从微信开放平台下载 jssdk.php 文件,并将其放置在与当前脚本相同的目录下。 ```php <?php require 'jssdk.php'; $appId = '你的appid'; $appSecret = '你的appsecret'; $jssdk = new JSSDK($appId, $appSecret); $signPackage = $jssdk->getSignPackage(); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>微信自定义分享</title> <script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> <!-- 引入微信的JavaScript SDK --> <script> wx.config({ appId: '<?php echo $signPackage["appId"];?>', timestamp: <?php echo $signPackage["timestamp"];?>, nonceStr: '<?php echo $signPackage["nonceStr"];?>', signature: '<?php echo $signPackage["signature"];?>', jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] // 需要使用分享接口 }); wx.ready(function(){ wx.onMenuShareTimeline({ title: '分享标题', // 分享标题 link: '分享链接', // 分享链接 imgUrl: '分享图片的链接', // 分享图标 success: function () { // 分享成功后的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareAppMessage({ title: '分享标题', // 分享标题 desc: '分享描述', // 分享描述 link: '分享链接', // 分享链接 imgUrl: '分享图片的链接', // 分享图标 success: function () { // 分享成功后的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); }); </script> </head> <body> <!-- 页面内容 --> </body> </html> ``` 上述代码中,我们首先引入了 jssdk.php 文件,并根据自己的实际情况设置了 `$appId` 和 `$appSecret` 并创建了 JSSDK 对象。 然后,在页面中引入了微信的 JavaScript SDK,并使用 `$signPackage` 中的签名数据进行微信配置。 在 `wx.ready` 的回调函数中,我们可以使用 `wx.onMenuShareTimeline` 和 `wx.onMenuShareAppMessage` 分别定义朋友圈和好友分享的内容。 你需要根据实际情况,将分享标题、链接和图标替换成你自己想要分享的内容。 当用户点击分享后,会触发相应的成功或取消的回调函数,你可以在这里进行相应的处理,例如提示分享成功或失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值