laravel_微信分享

今天接触到了微信分享,来记录一下自己所理解的一些逻辑,首先,我画了一个草图,模拟逻辑.

 

微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

 

上代码:

test.blade.php


 
 
  1. <!DOCTYPE html>
  2. <html lang= "en">
  3. <head>
  4. <meta charset= "UTF-8">
  5. <title>微信分享测试</title>
  6. </head>
  7. <body onload= "window_onload()">
  8. <div style= "width:100%;"><img style= "width:100%" src= "#" alt= ""></div>
  9. </body>
  10. <script src= "http://www.jq22.com/jquery/jquery-2.1.1.js"></script>
  11. <script type= "text/javascript" src= "http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
  12. <script>
  13. function window_onload() {
  14. $.ajax({
  15. type: "GET",
  16. url: "/test/getConfig",
  17. data: {url: this.location.href},
  18. dataType: "json",
  19. success: function (data) {
  20. wx.config({
  21. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  22. appId: data.appid, // 必填,公众号的唯一标识
  23. timestamp: data.timestamp, // 必填,生成签名的时间戳
  24. nonceStr: data.nonceStr, // 必填,生成签名的随机串
  25. signature: data.signature, // 必填,签名,见附录1
  26. jsApiList: [ 'checkJsApi',
  27. 'onMenuShareTimeline',
  28. 'onMenuShareAppMessage',
  29. 'onMenuShareQQ',
  30. 'onMenuShareWeibo',
  31. 'hideMenuItems',
  32. 'showMenuItems',
  33. 'hideAllNonBaseMenuItem',
  34. 'showAllNonBaseMenuItem',
  35. 'translateVoice',
  36. 'startRecord',
  37. 'stopRecord',
  38. 'onRecordEnd',
  39. 'playVoice',
  40. 'pauseVoice',
  41. 'stopVoice',
  42. 'uploadVoice',
  43. 'downloadVoice',
  44. 'chooseImage',
  45. 'previewImage',
  46. 'uploadImage',
  47. 'downloadImage',
  48. 'getNetworkType',
  49. 'openLocation',
  50. 'getLocation',
  51. 'hideOptionMenu',
  52. 'showOptionMenu',
  53. 'closeWindow',
  54. 'scanQRCode',
  55. 'chooseWXPay',
  56. 'openProductSpecificView',
  57. 'addCard',
  58. 'chooseCard',
  59. 'openCard'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  60. });
  61. wx.ready( function () {
  62. wx.onMenuShareAppMessage({
  63. title: '分享标题', // 分享标题
  64. desc: '分享描述', // 分享描述
  65. link: '#', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  66. imgUrl: '#', // 分享图标
  67. type: 'link', // 分享类型,music、video或link,不填默认为link
  68. dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
  69. success: function () {
  70. alert( '分享成功')
  71. }
  72. });
  73. });
  74. wx.error( function (res) {
  75. alert( "error: " + res.errMsg);
  76. });
  77. },
  78. error: function () {
  79. alert(error);
  80. }
  81. })
  82. }
  83. </script>
  84. </html>

TestWeixinController.php


 
 
  1. <?php
  2. namespace App\ Http\ Controllers;
  3. use Illuminate\ Support\ Facades\ Cache;
  4. use Illuminate\ Http\ Request;
  5. use App\ Http\ Requests;
  6. use App\ Http\ Controllers\ Controller;
  7. use Illuminate\ Support\ Facades\ Input;
  8. class testWeixinController extends Controller
  9. {
  10. public function getConfig(Request $request)
  11. {
  12. //获取参数
  13. $url = $request->get( 'url');
  14. //公众号的appid、secret
  15. $appid = "appid";
  16. $secret = "secret";
  17. //缓存内是否存在accessToken。
  18. $accessToken = Cache::remember( 'accessToken11', 120, function () use ($appid, $secret) {
  19. //获取access_token的请求地址
  20. $accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret";
  21. //请求地址获取access_token
  22. $accessTokenJson = file_get_contents($accessTokenUrl);
  23. $accessTokenObj = json_decode($accessTokenJson);
  24. $accessToken = $accessTokenObj->access_token;
  25. return $accessToken;
  26. });
  27. //获取jsapi_ticket的请求地址
  28. $ticketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$accessToken&type=jsapi";
  29. $jsapiTicketJson = file_get_contents($ticketUrl);
  30. $jsapiTicketObj = json_decode($jsapiTicketJson);
  31. $jsapiTicket = $jsapiTicketObj->ticket;
  32. //随机生成16位字符
  33. $noncestr = str_random( 16);
  34. //时间戳
  35. $time = time();
  36. //拼接string1
  37. $jsapiTicketNew = "jsapi_ticket=$jsapiTicket&noncestr=$noncestr×tamp=$time&url=$url";
  38. //对string1作sha1加密
  39. $signature = sha1($jsapiTicketNew);
  40. //存入数据
  41. $data = [
  42. 'appid' => $appid,
  43. 'timestamp' => $time,
  44. 'nonceStr' => $noncestr,
  45. 'signature' => $signature,
  46. 'jsapiTicket' => $jsapiTicket,
  47. 'url' => $url,
  48. 'jsApiList' => [
  49. 'api' => '#'
  50. ]
  51. ];
  52. //返回
  53. return json_encode($data);
  54. }
  55. }

2018-09-20 添加说明: $jsapiTicket 最好也需要存入session   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值