> 웹 프론트엔드 > JS 튜토리얼 > Javascript는 wx.config 내부 필드를 획득하고 WeChat Sharing_javascript 기술을 해결합니다.

Javascript는 wx.config 내부 필드를 획득하고 WeChat Sharing_javascript 기술을 해결합니다.

WBOY
풀어 주다: 2016-05-16 15:11:21
원래의
1562명이 탐색했습니다.

배경
WeChat에서 개발을 공유할 때 일반적인 프로세스는

입니다.

 <&#63;php
 require_once "jssdk.php";
 $jssdk = new JSSDK("yourAppID", "yourAppSecret");
 $signPackage = $jssdk->GetSignPackage();
&#63;>
 <!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>微信分享</title>
 </head>
 <body>
 </body>
 <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
 <script>
 wx.config({
  appId: '<&#63;php echo $signPackage["appId"];&#63;>',
  timestamp: <&#63;php echo $signPackage["timestamp"];&#63;>,
  nonceStr: '<&#63;php echo $signPackage["nonceStr"];&#63;>',
  signature: '<&#63;php echo $signPackage["signature"];&#63;>',
  jsApiList: ['onMenuShareTimeline'
  'onMenuShareAppMessage'
  ]
 });

 wx.ready(function() {
  
  wx.onMenuShareTimeline({
  title: '', // 分享标题
  link: '', // 分享链接
  imgUrl: '', // 分享图标
  success: function() {
   // 用户确认分享后执行的回调函数
  },
  cancel: function() {
   // 用户取消分享后执行的回调函数
  }
  });

  wx.onMenuShareAppMessage({
  title: '', // 分享标题
  desc: '', // 分享描述
  link: '', // 分享链接
  imgUrl: '', // 分享图标
  type: '', // 分享类型,music、video或link,不填默认为link
  dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
  success: function() {
   // 用户确认分享后执行的回调函数
  },
  cancel: function() {
   // 用户取消分享后执行的回调函数
  }
  });

 });
 </script>

 </html>
로그인 후 복사

위는 PHP 파일입니다. 이러한 코드의 큰 단점은 프런트엔드와 백엔드 간의 결합도가 너무 높다는 것입니다. 둘째, 혼합 작성이 그다지 아름답지 않기 때문에 구현하려면 PHP와 HTML을 분리해야 합니다. 공유 기능. 먼저 WeChat의 jssdk Api를 호출하여 구성 매개변수를 얻어야 합니다. 이는 php 배경 언어를 통해 얻어야 하며, wx.config에서 이러한 매개변수를 구성해야 합니다. http://res.wx.qq.com/open/js/jweixin-1.0.0.js 그런 다음 공유 함수를 작성할 수 있습니다. 해당 종속성은 js 라이브러리가 필요합니다. . 및 구성 내의 매개변수, 종속성 공유 wx.config
그래서 가장 중요한 것은 PHP의 구성 매개변수를 분리하여 별도로 얻는 것입니다

솔루션
PHP를 작성하여 인터페이스로 구성 매개변수를 가져오고, ajax를 사용하여 js에서 호출하고, 매개변수를 가져와 객체로 변환한 다음, 콜백 함수를 통해 ajax에서 얻은 매개변수를 wx.config에 넣습니다.

코드 구조 및 기능


  • index.html 페이지 항목
  • weixin.php 서버 측에서 구성 매개변수 가져오기
  • configdata.php는 구성을 변명 출력으로 변환합니다
  • getconfig.js는 ajax를 사용하여 configdata.php의 데이터를 가져옵니다
  • share.js 공유 콜백 편지
  • webpack.config.js 웹팩 구성 파일
  • index.js 패키징 후 최종 html은 js 파일을 호출합니다

index.html html 정적 파일

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>静态页面微信分享测试</title>
</head>
<body>
 <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
 <script src="statics/js/index.js"></script>
</body>
</html>
로그인 후 복사

configdata.php는 백그라운드에서 구성된 매개변수를 가져옵니다. URL은 공유하는 페이지의 URL과 함께 작성되어야 합니다. 그렇지 않으면 잘못된 서명 오류가 보고됩니다.

 <&#63;php
class JSSDK {
 private $appId;
 private $appSecret;

 public function __construct($appId, $appSecret) {
 $this->appId = $appId;
 $this->appSecret = $appSecret;
 }

 public function getSignPackage() {
 $jsapiTicket = $this->getJsApiTicket();
 $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
 $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()) {
 $accessToken = $this->getAccessToken();
 $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket&#63;type=jsapi&access_token=$accessToken";
 $res = json_decode($this->httpGet($url));
 $ticket = $res->ticket;
 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()) {
 $url = "https://api.weixin.qq.com/cgi-bin/token&#63;grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
 $res = json_decode($this->httpGet($url));
 $access_token = $res->access_token;
 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_URL, $url);

 $res = curl_exec($curl);
 curl_close($curl);

 return $res;
 }
}

로그인 후 복사

weixin.php는 구성 매개변수 형식을 지정하고 출력합니다

 <&#63;php

 require_once "weixin.php";
 $jssdk = new JSSDK(appId, appSecretecret);
 $signPackage = $jssdk->GetSignPackage();
 
 class Config{ 
 var $appId; 
 var $timestamp; 
 var $nonceStr; 
 var $signature; 
 var $url;
 } 
 
 $config = new Config(); 
 
 $config -> appId = $signPackage["appId"]; 
 $config -> timestamp = $signPackage["timestamp"]; 
 $config -> nonceStr = $signPackage["nonceStr"]; 
 $config -> signature = $signPackage["signature"];
 $config -> url = $signPackage["url"]; 
 
 echo json_encode($config);
&#63;>

로그인 후 복사

getconfig.js는 ajax를 사용하여 인터페이스 데이터(구성 매개변수)를 가져옵니다.

var getConfig = function(callback) {
 $.ajax({
 url: "http://www.goxueche.com/api/configdata.php",
 type: "get",
 success: function(data) {
  callback(data);
 }
 })
}

module.exports = getConfig;

로그인 후 복사

share.js 공유 기능

var getWeixincofig = require("./getconfig.js");
getWeixincofig(shareweixin);


function shareweixin(data) {

 var data = JSON.parse(data);
 console.log(data);

 window.wx.config({
 debug:true,
 appId: data.appId,
 timestamp: data.timestamp,
 nonceStr: data.nonceStr,
 signature: data.signature,
 jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage']
 });

 wxShare();
}

function wxShare() {
 //检测api是否生效
 wx.ready(function() {
 wx.checkJsApi({
 jsApiList: [
 'getNetworkType',
 'previewImage'
 ],
 success: function(res) {
 console.log(JSON.stringify(res));
 }
 });
 //分享给好友
 wx.onMenuShareAppMessage({
 title: '趣学车-有温度的互联网驾校',
 desc: '想去学车,就趣学车!',
 link: 'http://www.goxueche.com',
 imgUrl: 'http://www.goxueche.com/....png'
 });
 
 //分享到朋友圈
 wx.onMenuShareTimeline({
 title: '趣学车-有温度的互联网驾校',
 desc: '想去学车,就趣学车!',
 link: 'http://www.goxueche.com',
 imgUrl: 'http://www.goxueche.com/....png'
 });

 });
}

로그인 후 복사

webpack.config.js

var webpack = require('webpack'); 
module.exports = { 
 entry: {
 index: './share.js',
 },
 output: {
 path: './',
 filename: '[name].js'
 }
};
로그인 후 복사

위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿