主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
软件开发工具包(外文缩写:SDK,外文全称:Software Development Kit)一般是一些软件工程师用来为特定的软件包、软件框架、硬件平台、操作系统等构建应用软件的开发工具的集合。本文主要和大家分享用php实现微信sdk共享接口,希望对你有所帮助。
lt?phpclass Wxsdk { private $ appIdprivate $ appSecret/* *这里是微视码微信官方账号的openid和appsecret。如果是配置给其他子商户,就要关注微视码的微信官方账号。*您需要获得openid和AppSecret * */public function _ _构造($ appid = # 39拥有appid # 39,$ appSecret = # 39拥有appSecret # 39){ $ this - gt;appId = $ appId$ this - gt;appSecret = $ appSecret}公共函数getsignpackage(request $ request){//前端转义的url被转义回$ url = $ _ POST$ durl = $ URL[ # 39;网址 # 39;];$ durl = URL decode($ durl);$ jsapi ticket = $ this - gt;getjsapi ticket();$ timest = time();$ non centr = $ this - gt;createnoncentr();//这里参数的顺序要按照键值$ string = " jsapi _ ticket = $ jsapi ticket ;noncestr = $ nonceStr 时间戳= $时间戳 url = $ durl ;$ signature = sha1($ string);$ sign package =[ ;appId = gt$ this - gt;appId, 非中心 = gt$ nonceStr, 时间戳 = gt$timest, url = gt$url, 签名 = gt$signature, rawString = gt$ string];//var _ dump($ sign package);死;抛出新的成功消息([ # 39;msg # 39= gt$ sign package]);}私有函数createnoncentr($ length = 16){ $ chars = ;abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 0123456789 ;;$ str = ";for($ I = 0;$ i lt$长度;$i++) { $str。= substr($chars,mt_rand(0,strlen($chars) - 1),1);} return $ str}私有函数getjsapi ticket(){//jsapi _ ticket要全局存储和更新。下面的代码被写入一个文件中作为示例$ data = JSON _ decode(file _ get _ contents(" jssdk/jsapi _ ticket . JSON ;));if($data - gt;expire _ time lttime()){ $ access token = $ this - gt;getAccessToken();//定义传递的参数数组$ params[ # 39;类型 # 39;] = 'jsapi # 39;$ params[ # 39;访问令牌 # 39;]= $ access token;$ url = https://api.weixin.qq.com/cgi-bin/ticket/getticket?访问令牌= 。$ params[ # 39;访问令牌 # 39;] ." type = 。$ params[ # 39;类型 # 39;] ."";$res = json_decode(curl_get($url,$ params));$ ticket = isset($ res- gt;票)?$ res->;票:空;if($ ticket){ $ res- gt;expire _ time = time()+7000;$ res->;jsapi _ ticket = $ ticket$ FP = fopen( ;jssdk/jsapi _ ticket . JSON ;, w );fwrite($fp,JSON _ encode($ RES));fclose($ FP);} } else { $ ticket = $ data - gt;jsapi _ ticket} return $ ticket} private function GetAccessToken(){//Access _ Token应该全局存储和更新。下面的代码被写入一个文件,作为示例$ data = JSON _ decode(file _ get _ contents(" jssdk/access _ token . JSON ;));if($data - gt;expire _ time lttime(){//定义传递的参数数组$ params[ # 39;grant _ type # 39] = 'client _ credential # 39;$ params[ # 39;appid # 39]= $ this - gt;appId$ params[ # 39;秘密 # 39;]= $ this - gt;appSecret$ url = https://api.weixin.qq.com/cgi-bin/token?格兰特_ type = 。$ params[ # 39;grant _ type # 39] ." appid = 。$ params[ # 39;appid # 39] ." secret = 。$ params[ # 39;秘密 # 39;] ."";$ RES = JSON _ decode(curl _ post($ URL,$ params));$ access _ token = isset($ res- gt;access_token)?$ res->;access _ token:NULL;if($ access _ token){ $ res- gt;expire _ time = time()+7000;$ res->;access _ token = $ access _ token$ FP = fopen( ;jssdk/access _ token . JSON ;, w );fwrite($fp,JSON _ encode($ RES));fclose($ FP);} } else { $ access _ token = $ data - gt;access _ token} return $ access _ token}前端代码检查官方步骤确认签名算法。
确认签名算法正确并且http://mp.weixin.qq.com/debug/cgi-bin/sandbox?可用。用于验证的jsapisign页面工具。
确认config中的non centr(JS中的hump standard capital S)和timest与签名中对应的non centr,timest一致。
确认该url是该页面的完整url(请参考当前页面alert(location . href . split( # 39;#')[0])确认),包括 # 39;http(s):// # 39;部分,和 # 39;?'后面的GET参数部分,但不包括 # 39;#'哈希之后的部分。
确保config中的appid与用于获取jsapi_ticket的appid一致。
确保缓存access_token和jsapi_ticket。
确保您要签名的url是动态获得的,并且可以在示例代码中的php实现中找到动态页面。如果是html的静态页面,前端通过ajax将url发送到后台进行签名,前端需要使用js获取当前页面并移除 # 39;#'哈希部分的链接(available location . href . split( # 39;#')[0]来获取,并且需要在后台由encodeURIComponent解码),因为一旦页面被共享,微信客户端会在你的链接末尾添加其他参数,如果不动态获取当前链接,共享的页面签名就会失效。
签名是正确的。如果以上步骤还没有解决你的问题(签名无效),那就用url问题。注意:微信微信官方账号必须配置你调试的安全域名(可以配置二级域名:xxx.com而不是多个a.xxx.com/b.xxx.com,等。).
原因:微信在分享时会给你当前页面添加多个参数。sha1的时候一定要保证url地址是微信给你加参数后的地址,这样就不会报config:signature无效。
解决方法:sha1之前的网址必须是解码后肉眼可以直接识别的正常网址。如果您使用的是静态页面,在配置wx.config之前,您应该将Encodeuri组件(location . href . split( # 39;#')[0])将当前url代码传递给后台,后台通过decodeURIComponent对其进行解码。核心代码如下:
前景中的Html页面,编码并传送url:
jquery . post( ;/XXX ;,{ url :encodeURIComponent(window . location . href . split( # 39;#')[0]), t :新日期()。getTime()},function(result){ if(result . errno!= 0){ alert( ;您当前的网络不稳定,请稍后再试!");返回;} var share URL = result . data . URL;Wx.config({ debug: true,//打开调试模式,所有api调用的返回值都会在客户端告警出来。要查看传入参数,可以在pc端打开,参数信息会通过log录入,只在pc端打印。appId: # 39;xxx # 39,//必选,微信官方账号的唯一标识符:timest:result . data . timest,//必选,签名生成的时间戳:result.data.noncestr,//必选,生成的随机字符串签名:result.data.signature,//必选。参见附录1 jsApiList:[ # 39;onMenuShareAppMessage # 39,'onMenuShareTimeline # 39,'onMenuShareQQ # 39,'onMenuShareWeibo # 39,'onMenuShareQZone # 39]//必选,要使用的JS接口列表,所有JS接口见附录2 });以上是php实现微信sdk共享接口的细节。请多关注主机参考其他相关文章!
这几篇文章你可能也喜欢:
- 小程序接口是什么意思?
- 小程序应该如何正确调用后端接口(小程序连接到后端)
- 帝国cms如何集成Ucenter接口(帝国CMS插件编写教程)
- 微信支付接口研究与分享(掌握微信支付接口)
- 从企业转移打开用户界面(如何进行企业转移)
本文由主机参考刊发,转载请注明:用php实现微信sdk共享接口(php调用微信支付接口) https://zhujicankao.com/80777.html
评论前必须登录!
注册