澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站微信支付之SDK,3集成微信分

2019-10-12 作者:www.8455.com   |   浏览(92)

 (我在thinkphp的官网和QQ空间更新过)关于微信分享,即微信名片式的链接(如下图)澳门新萄京官方网站 1,首先需要有经过验证的微信公众号,否则是玩不来的。
制作这种名片式的分享链接的步骤如下:
1、需要在公众号里绑定域名(一个公众号限定绑定三个域名,一天也只能修改三次),开通开发者模式,把里面的AppId和AppSecret记录下来,后面会用到;
2、下载腾讯官方的API文件(Demo包有4个文件,不过我们需要的是其中的3个php文件:jssdk.php、jsapi_ticket.php),这三个文件是怎样的,自己去查腾讯微信的API文档吧。别忘了在jssdk.php中添加命名空间:
namespace HomeController;

先来看看微信分享效果:

<?php
class JSSDK {
private $appId;//appid
private $appSecret;//应用密钥
// echo $appId;
// echo $appSecret;
public function __construct($appId, $appSecret) {
$this->appId = $appId;
$this->appSecret = $appSecret;
}

use ThinkController;
否则会出现找不到JSSDK类的情况;
3、接下来是非常粗糙的写法,基于目前对命名空间的使用和对thinkphp的公共函数用法以及类的继承和构造函数的使用不熟悉的前提,我把所有的关联代码都写在了同一个控制器文件中,什么都不用说,直接上代码:

在没有集成微信分享js-sdk前是这样的:没有摘要,缩略图任意抓取正文图片

public function getSignPackage() {
$jsapiTicket = $this->getJsApiTicket();
$url = "]";
$timestamp = time();
$nonceStr = $this->createNonceStr();

<?php

澳门新萄京官方网站 2

// 这里参数的顺序要按照 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; 

namespace HomeController;

在集成微信分享js-sdk后是这样的:标题,摘要,缩略图自定义

}

use ThinkController;

澳门新萄京官方网站 3

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;
}

class IndexController extends Controller {

一、下载微信SDK开发包

public function getJsApiTicket() {
// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$accessToken = $this->getAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
$res = json_decode($this->httpGet($url));
$ticket = $res->ticket;
return $ticket;
}

    public function index(){
                /*******************************************下面是微信分享的代码***********************************************/
 // 因为不熟悉命名空间的使用,我直接把微信的API文件放在和这个控制器文件同一级的Controller目录下
                include('jssdk.php');         

下载地址:

public function getAccessToken() {
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$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;
return $access_token;
}
function httpGet($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
// curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
// curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$jssdk = new JSSDK("wxf352c30e8350b48a","28e56c1a1ea8aefdfd2e700853bef8c9");

二、设置安全域名

$temp = curl_exec($ch);
curl_close($ch);
return $temp;

$wxconfig = array();

所有的微信JS接口都只能在公众号绑定的域名下调用。登录微信公众平台,点击左边的“公众号设置”,切换到“功能设置”,在“JS接口安全域名”一栏设置安全域名,下载验证文件到网站根目录,再回到窗口点击“确定”(注:在点击“确定”前,设置的域名下都要能在浏览器下正常访问刚才下载的验证文件才能通过验证)。

}

$wxconfig = $jssdk ->GetSignPackage();

澳门新萄京官方网站 4

}
?>

 

三、以第三方插件形式集成到ThinkPHP

<script src=";
<?php
$jssdk = new JSSDK("you APPID", "you appSecret");
$signPackage = $jssdk->getSignPackage();
?>
<script>
// 注意:所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
// 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
// 完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
//https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.5189975742348003#dlwz1

$this->assign('wxconfig',$wxconfig);

1、定义第三方类库目录(也可以放置在TP框架默认的插件目录ThinkPHP/Library/Vendor/)。

wx.config({
debug: true,//是否调试模式
appId: 'APPid',//切记更换APPID
timestamp: <?php echo $signPackage["timestamp"];?>,//必填,生成签名的时间戳
nonceStr: '<?php echo $signPackage["nonceStr"];?>',// 必填,生成签名的随机串
signature: '<?php echo $signPackage["signature"];?>',// 必填,签名
jsApiList: [澳门新萄京官方网站微信支付之SDK,3集成微信分享JS。'openLocation'] // 必填,需要使用的JS接口列表,多个之间用逗号隔开
});
wx.ready(function () {
wx.getLocation({
type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: function (res) {

               /************************************************************************************************************************/

在入口文件中加入define('VENDOR_PATH' APP_PATH .'Common/Vendor/');

    var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90

    var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。

    var speed = res.speed; // 速度,以米/每秒计

    var accuracy = res.accuracy; // 位置精度
    alert(latitude);
    alert(longitude);

  }

});

if(empty($_POST)){

2、在ApplicationCommonVendor文件夹下新建文件夹Wxshare,解压微信SDK开发包,将jssdk.PHP、access_token.php、jsapi_ticket.php复制到Wxshare,重命名jssdk.php为class.jssdk.php(符合TP加载规则的文件名)。

});
</script>

//echo "wrong";

澳门新萄京官方网站 5

有不足之处还望提出。

$this->display();

3、修改access_token.php、jsapi_ticket.php的读写路径。打开class.jssdk.php文件,加入私有属性private $filePath;

}else{

在构造函数中设置属性为当前文件路径:$this->filePath = __DIR__.'/';

$submit=M("User");

搜索access_token.php、jsapi_ticket.php,在文件名前连接上$this->filePath

if (!$submit->autoCheckToken($_POST)){

四、应用

         // 令牌验证错误

1、在公共函数库写一函数方便调用

         //return false;

/**

         //echo "表单信息重复提交了";

* 微信分享初始化

         $this->display();

* @return array

 

* @author simon

         }else{

*/

         $get["username"]=$_POST["name"];

if(!function_exists('wx_share_init')){

            $get["telphone"]=$_POST["mobile"];

function wx_share_init(){

            $submit->add($get);

$wxconfig = array();

             //$name=md5($get["username"]);//字符加密

vendor('Wxshare.class#jssdk');

             //echo $get["username"]."<br>".$get["telphone"];

$config = APP_DEBUG ? C("WECHAT_SDK_TEST"): C("WECHAT_SDK");//这里配置了微信公众号的AppId和AppSecret

         }

$jssdk =new JSSDK($config['APPID'], $config['APPSECRET']);

                $this->display();

$wxconfig = $jssdk->GetSignPackage();

}

return $wxconfig;

    }

}


 
 4、在模板文件Index.html中导入jweixin-1.0.0.js文件和添加如下代码:

}

<!--微信分享代码-->

复制代码

<script src=""></script>

2、控制器调用

<script>

在需要做微信分享的控制器方法中调用:

wx.config({

$wxconfig = wx_share_init();

    appId: '{$wxconfig["appId"]}',

$this->assign('wxconfig', $wxconfig);

    timestamp: {$wxconfig["timestamp"]},

复制代码

    nonceStr: '{$wxconfig["nonceStr"]}',

3、模板填充

    signature: '{$wxconfig["signature"]}',

在模板文件尾部加入:

   jsApiList: [

wx.config({

        'checkJsApi',

debug:false,// 是否开启调试模式

        'onMenuShareTimeline',

appId:'',// 必填,微信号AppID

        'onMenuShareAppMessage',

timestamp:,// 必填,生成签名的时间戳

        'onMenuShareQQ',

nonceStr:'',// 必填,生成签名的随机串

        'onMenuShareWeibo'

signature:'',// 必填,签名,见附录1

      ]

jsApiList:['onMenuShareTimeline',//分享到朋友圈

  });

'onMenuShareAppMessage',//分享给朋友

  /*

'onMenuShareQQ'//分享到QQ

 * 注意:

]// 必填,需要使用的JS接口列表,所有JS接口列表见附录2

 * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

});

 * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。

wx.ready(function(){

 * 3. 完整 JS-SDK 文档地址:

var options ={

 *

title:'',// 分享标题

 * 如有问题请通过以下渠道反馈:

link:' 分享链接,记得使用绝对路径

 * 邮箱地址:weixin-open@qq.com

imgUrl:' 分享图标,记得使用绝对路径

 * 邮件主题:【微信JS-SDK反馈】具体问题

desc:'',// 分享描述

 * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。

success:function(){

 */

console.info('分享成功!');

wx.ready(function () {

// 用户确认分享后执行的回调函数

  var options = {

},

title: '上海红酒交易中心-微红酒(华南运营中心)',

cancel:function(){

link: 'www.gxjft.com',

console.info('取消分享!');

imgUrl: '',        //必须使用绝对路径

// 用户取消分享后执行的回调函数

desc: '上海红酒交易中心,我国第一家红酒电子交易平台,也是亚洲第一家红酒交易中心。',

}

success: function(){

}

console.info('分享成功!');

wx.onMenuShareTimeline(options);// 分享到朋友圈

},

wx.onMenuShareAppMessage(options);// 分享给朋友

cancel: function(){

wx.onMenuShareQQ(options);// 分享到QQ

console.info('取消分享');

});

}

复制代码

  }

到此完成!在微信中访问网址并分享试试看效果。

    

五、查阅开发文档

  

微信JS-SDK Demo地址:

  wx.onMenuShareAppMessage(options);

常见问题及完整 JS-SDK 文档地址:

  wx.onMenuShareTimeline(options);


  wx.onMenuShareQQ(options);

补充一个使用场景:

  wx.onMenuShareWeibo(options);

如果是前后台端分离的网站架构(也就是通过api接口的形式),前端必然要用到ajax请求,会出现一个问题:

});

被请求的网址与调用的网址不一致,微信SDK会提示签名无效。提供一个解决办法是:把调用的网址当成参数发回给服务器端,再生成微信签名。

wx.error(function (res) {

示例代码:

  alert(res.errMsg);

1、后端代码(如请求:/api/common/wxshareinit)将获取的微信签名参数打包成一个JSON,格式如:

}); 

{

</script> 
以上就是微信分享制作的基本流程,因为对PHP还是不大熟悉,写出来的代码相当不简洁和漂亮,如果有什么遗漏的地方后面会补上和优化。
如果看不惯的话,可以访问这个网址:。我都是从这里面捣鼓出来的。 

"appId":"XXXXX",

"nonceStr":"XXXXXXXX",

"timestamp":1478161661,

"url":"http://www.xxx.com/news/detail/id/54",

"signature":"aa4eeec5e1ad6f39c85cd4f3c1147329a16eb784",

"rawString":"jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VIqb--nsh20pd5ZnAlGF4nz5j33A5wpvImM6P1_QX3azn2Kca1KYOCO9NfeWEQsNng&noncestr=NJVodYffglDbM3fD×tamp=1478161661&url=http:/

/www.xxx.com/news/detail/id/54"

}

复制代码

2前端页面调用:

var wxconfig =[];//定义一个全局的保存微信配置的变量

$(function(){

$.ajax({

async:false,//这里设为同步请求(重要)

type:'POST',

url:'/api/common/wxshareinit',//被请求的网址

data:{url:document.URL},//将当前调用网址发回给服务器做签名用

dateType:'JSON',

cache:false,

success:function(result){

wxconfig = result.data;

},

error:function(){

alert('微信分享初始化失败!');

}

});

wx.config({

debug:false,// 是否开启调试模式

appId: wxconfig.appId,// 必填,微信号AppID

timestamp: wxconfig.timestamp,// 必填,生成签名的时间戳

nonceStr: wxconfig.nonceStr,// 必填,生成签名的随机串

signature: wxconfig.signature,// 必填,签名,见附录1

jsApiList:['onMenuShareTimeline',//分享到朋友圈

'onMenuShareAppMessage',//分享给朋友

'onMenuShareQQ'//分享到QQ

]// 必填,需要使用的JS接口列表,所有JS接口列表见附录2

});

wx.ready(function(){

var options ={

title:'【有料】3号产品神秘体验,到底爽在哪?—xxx平台',// 分享标题

link:' 分享链接

imgUrl:' 分享图标

desc:'年化收益9.9%,3个月到期还本付息,起购门槛20万',// 分享描述

success:function(){

console.info('分享成功!');

// 用户确认分享后执行的回调函数

},

cancel:function(){

console.info('取消分享!');

// 用户取消分享后执行的回调函数

}

}

wx.onMenuShareTimeline(options);// 分享到朋友圈

wx.onMenuShareAppMessage(options);// 分享给朋友

wx.onMenuShareQQ(options);// 分享到QQ

});

});

本文由澳门新萄京官方网站发布于www.8455.com,转载请注明出处:澳门新萄京官方网站微信支付之SDK,3集成微信分

关键词: