微信开发php

合集下载

phpwechat使用方法

phpwechat使用方法

phpwechat使用方法PHPWeChat 是一个基于PHP 的微信开发框架,它提供了丰富的功能和简化了微信开发的流程。

本文将介绍PHPWeChat 的使用方法,帮助开发者快速上手。

一、安装 PHPWeChat1. 下载 PHPWeChat 的源码包,并解压到服务器的网站目录中。

2. 创建一个数据库,并导入 PHPWeChat 提供的 SQL 文件。

3. 在config 目录中,复制config.example.php 文件,并将复制的文件重命名为 config.php。

4. 打开config.php 文件,根据实际情况进行配置,包括数据库信息、微信公众号的 AppID 和 AppSecret 等。

二、配置微信公众号1. 登录微信公众平台,进入开发者中心,获取AppID 和AppSecret。

2. 在公众号设置中,配置服务器地址,将服务器的 URL 填入配置项中。

3. 在公众号设置中,配置接口权限,将接口地址填入配置项中。

4. 在公众号设置中,配置消息与事件接收地址,将接口地址填入配置项中。

三、开发微信功能1. 在 PHPWeChat 的根目录中,打开 modules 目录,可以看到已经存在了一些模块。

2. 在modules 目录中,可以创建自己的模块,每个模块对应一个功能。

3. 在模块中,创建一个 php 文件,命名为 index.php。

4. 在 index.php 文件中,编写处理微信消息和事件的代码。

可以使用 PHPWeChat 提供的 API 来处理消息的接收和回复。

5. 在index.php 文件中,可以使用PHPWeChat 提供的模板函数来渲染消息的展示界面。

四、部署和测试1. 将开发好的模块文件上传到服务器上的相应目录。

2. 在微信公众平台的开发者中心,启用开发模式,将服务器的URL 填入配置项中。

3. 在微信公众号中,发送消息或触发事件,查看是否能够正常接收和回复。

五、其他功能1. PHPWeChat 还提供了丰富的功能模块,如菜单管理、素材管理、用户管理等。

小程序php开发面试题(3篇)

小程序php开发面试题(3篇)

第1篇第一部分:基础知识与框架理解1. PHP基础知识- 请简述PHP的版本历史以及当前主流的版本是哪个?- 解释什么是PHP的魔术引号,并举例说明。

- 如何在PHP中声明一个变量?如何区分变量名和关键字?- 描述PHP中的数据类型,包括基本类型和复合类型。

- 解释PHP中的面向对象编程(OOP)的基本概念,如类、对象、继承、封装、多态等。

- 如何在PHP中实现单例模式?请写出代码示例。

2. PHP环境搭建与配置- 如何在Windows和Linux环境下安装PHP?- 解释PHP的运行模式,如CGI、FastCGI、Apache模块等。

- 如何配置PHP的扩展模块?- 如何配置PHP的数据库连接?3. 常用PHP扩展库- 解释什么是PHP的扩展库,如PDO、MySQLi、CURL等。

- 描述PDO和MySQLi的区别与联系。

- 如何使用CURL库进行HTTP请求?4. 框架理解- 解释什么是框架,以及PHP中常用的框架有哪些,如Laravel、Symfony、CodeIgniter等。

- 描述MVC设计模式,并说明如何在PHP框架中实现。

- 解释什么是ORM(对象关系映射),并举例说明其在PHP框架中的应用。

第二部分:小程序开发1. 小程序概述- 解释什么是小程序,以及与原生APP、Web应用的区别。

- 描述小程序的生命周期,包括页面加载、渲染、交互等。

2. 小程序框架- 解释什么是微信小程序框架,如WxParse、WePY、Taro等。

- 描述小程序框架的基本组件,如页面、组件、API等。

3. 小程序PHP后端开发- 如何在PHP中实现小程序的API接口?- 解释RESTful API的设计原则,并举例说明。

- 如何在PHP中处理小程序的登录与授权?- 如何在PHP中实现小程序的支付功能?4. 数据库设计- 解释什么是数据库设计,以及常用的数据库设计范式。

- 描述如何设计小程序的后端数据库,包括表结构、索引、关联等。

php版微信公众平台之微信网页登陆授权示例

php版微信公众平台之微信网页登陆授权示例

php版微信公众平台之微信⽹页登陆授权⽰例本⽂实例讲述了php版微信公众平台之微信⽹页登陆授权。

分享给⼤家供⼤家参考,具体如下:微信公众平台实现微信⽹页登陆授权开发其实是⾮常的简单了,因为官⽅的参考程序了,下⾯⼩编就看了⼀站长根据官⽅参考做的⼀个⽹页登陆授权例⼦,⼤家可看看.⽂件1:index.php//换成⾃⼰的接⼝信息$appid = 'XXXXX';header('location:https:///connect/oauth2/authorize?appid='.$appid.'&redirect_uri=127.0.0.1/oauth.php&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect');参数是否必须说明appid是公众号的唯⼀标识redirect_uri是授权后重定向的回调链接地址,请使⽤urlencode对链接进⾏处理response_type是返回类型,请填写codescope是应⽤授权作⽤域,snsapi_base(不弹出授权页⾯,直接跳转,只能获取⽤户openid),snsapi_userinfo(弹出授权页⾯,可通过openid拿到昵称、性别、所在地。

并且,即使在未关注的情况下,只要⽤户授权,也能获取其信息)state否重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值#wechat_redirect是⽆论直接打开还是做页⾯302重定向时候,必须带此参数⽂件⼆:oauth.php,代码如下:<?php$code = $_GET['code'];$state = $_GET['state'];//换成⾃⼰的接⼝信息$appid = 'XXXXX';$appsecret = 'XXXXX';if (emptyempty($code)) $this->error('授权失败');$token_url = 'https:///sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';$token = json_decode(file_get_contents($token_url));if (isset($token->errcode)) {echo '<h1>错误:</h1>'.$token->errcode;echo '<br/><h2>错误信息:</h2>'.$token->errmsg;exit;}$access_token_url = 'https:///sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;//转成对象$access_token = json_decode(file_get_contents($access_token_url));if (isset($access_token->errcode)) {echo '<h1>错误:</h1>'.$access_token->errcode;echo '<br/><h2>错误信息:</h2>'.$access_token->errmsg;exit;}$user_info_url = 'https:///sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN'; //开源软件: //转成对象$user_info = json_decode(file_get_contents($user_info_url));if (isset($user_info->errcode)) {echo '<h1>错误:</h1>'.$user_info->errcode;echo '<br/><h2>错误信息:</h2>'.$user_info->errmsg;exit;}//打印⽤户信息echo '<pre>';print_r($user_info);echo '</pre>';>参数描述openid⽤户的唯⼀标识nickname⽤户昵称sex⽤户的性别,值为1时是男性,值为2时是⼥性,值为0时是未知province⽤户个⼈资料填写的省份city普通⽤户个⼈资料填写的城市country国家,如中国为CNheadimgurl⽤户头像,最后⼀个数值代表正⽅形头像⼤⼩(有0、46、64、96、132数值可选,0代表640*640正⽅形头像),⽤户没有头像时该项为空.privilege⽤户特权信息,json数组,如微信沃卡⽤户为(chinaunicom)unionid只有在⽤户将公众号绑定到微信开放平台帐号后,才会出现该字段。

微信开发步骤(一)

微信开发步骤(一)

1.注册微信公众平台账号(推荐服务号,服务号可开发功能比订阅号多。

)服务号订阅号2.下载微信官方API(wx_sample.php文件),建议使用Dreamweaver打开。

3.进入微信公众号,点击“功能-> 高级功能”。

使用开发模式。

4.注册“百度开发者”账号(不要使用中文)。

注册完成之后,在右上角“开发者服务管理中”创建工程点击左侧菜单“应用引擎”选项,来添加环境配置。

部署类型选择php-web。

点击扩展服务,添加mysql 服务。

5.Svn设同步代码置。

先下载svn,可直接安装。

在任意位置新建文件夹(如:E:\\weixin)。

复制svn地址。

在E:\\weixin 文件夹右击,选择” SVN Checkout” ,将复制的svn地址粘贴到红框内提交,用户名和密码就是百度账号的用户名/密码。

将步骤2下载的wx_sample.php拉到weixin 目录下,右击选择“Add”再右击wx_sample.php,选择svn Commit ,填写提交信息后提交回到百度开发中心,工程状态会提示有新版(不显示刷新页面),点击快捷发布即可。

6.接口验证,需要url和Token的值。

打开wx_sample.php文件,第七行中的weixin为Token的值(可修改为你喜欢的值)。

url 的值为步骤4中域名/wx_sample.php,即/wx_sample.php。

7.关键词回复开发。

用Dreamweaver打开步骤2下载的wx_sample.php,在46行插入以下代码。

$msgType = "text";//回复信息类型为文本信息switch ( $keyword ){case "1"; //用户回复1,显示”公司简介”$contentStr = "公司简介";break;case "2";//用户回复1,显示”最新套餐”$contentStr = "最新套餐";break;default; //用户回复1、2以外的信息,显示”感谢您……”$contentStr = "感谢您关注川臂网络科技!回复“1”公司简介;回复“1”最新套餐";}选择Dreamweaver 修改---页面属性,将编码改为UTF-8保存,避免出现中文乱码。

php微信接口API之长链接转短链接代码示例

php微信接口API之长链接转短链接代码示例

php微信接⼝API之长链接转短链接代码⽰例[php]1. <?php2. header("Content-Type: text/html; charset=utf-8");3. $longurl;4. if(isset($_POST['longurl'])){5. $longurl = $_POST['longurl'];6. }else{7. die("没有post值进来");8. }9.10. //echo $longurl;11.12. $id = "你的AppID";13. $secret = "你的AppSecret";14. $url = "https:///cgi-bin/token?grant_type=client_credential&appid=".$id."&secret=".$secret."";15.16. $token = getAccessToken($url);17. //echo $token;18. //你的长链接19. //$longurl = "/";20. $data = '{"action":"long2short","long_url":"'.$longurl.'"}';21. $shorturl = "https:///cgi-bin/shorturl?access_token=".$token."";22.23. echo httpPost($shorturl,$data);24. //echo "你的长链接是:".$longurl;25. //echo "<br />";26. //⽣成的短链接27. //echo "⽣成的短链接是:".$shortArr['short_url'];28. //echo $shortArr;29.30. function getAccessToken($url) {31. // access_token 应该全局存储与更新,以下代码以写⼊到⽂件中做⽰例32. $data = json_decode(file_get_contents("access_token.json"));33. if ($data->expire_time < time()) {34. // 如果是企业号⽤以下URL获取access_token35. $output = httpGet($url);36. $res = (array)json_decode($output);37. $access_token = $res['access_token'];38. if ($access_token) {39. $data->expire_time = time() + 7000;40. $data->access_token = $access_token;41. $fp = fopen("access_token.json", "w");42. fwrite($fp, json_encode($data));43. fclose($fp);44. //echo 'access_token.json读写了⼀次';45. }46. } else {47. $access_token = $data->access_token;48. }49. return $access_token;50. }51.52. function httpGet($url) {53. //echo "url = ".$url;54. $curl = curl_init();55. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);56. curl_setopt($curl, CURLOPT_TIMEOUT, 500);57. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);58. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);59. curl_setopt($curl, CURLOPT_URL, $url);60.61. $res = curl_exec($curl);62. curl_close($curl);63. return $res;64. }65.66. function httpPost($url,$data){67. $curl = curl_init();68. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);69. curl_setopt($curl, CURLOPT_TIMEOUT, 500);70. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);71. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);72. curl_setopt($curl, CURLOPT_URL, $url);73. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");74. curl_setopt($curl, CURLOPT_POSTFIELDS, $data);75.76. $res = curl_exec($curl);77. curl_close($curl);78. return $res;79. }80.81. ?>。

PHPEMS微信端设置教程

PHPEMS微信端设置教程

PHPEMS微信端设置教程微信端已成为现代社会中最为流行的通讯工具之一,许多企业和组织纷纷选择利用微信平台进行信息传播和业务推广。

在这样的背景下,PHPEMS为用户提供了微信端设置功能,使用户可以轻松地将信息发布到微信平台上,并与客户进行互动。

本文将为您介绍如何使用PHPEMS微信端设置功能,并详细说明每个步骤的操作方法。

第一步:登录PHPEMS后台管理系统首先,您需要访问PHPEMS网站,并登录后台管理系统。

在登录页面中输入正确的用户名和密码,然后点击“登录”按钮进入系统主界面。

第二步:进入微信端设置页面在系统主界面中,您可以看到左侧导航栏,其中包含了各种管理功能。

请点击导航栏中的“微信端设置”选项,进入微信端设置页面。

第三步:配置微信公众号信息在微信端设置页面中,您需要配置微信公众号信息,这样才能与微信平台进行连接。

具体的配置步骤如下:1.获取微信公众号的AppID和AppSecret,这些信息可以在微信公众平台的开发者中心中找到。

2.在微信端设置页面填写AppID和AppSecret,并点击“保存”按钮。

第四步:设置菜单栏在微信端设置页面的下方,您可以看到一个名为“菜单栏设置”的部分。

通过设置菜单栏,您可以在微信端上展示您的产品、服务和其他信息。

具体的设置步骤如下:1.点击“添加菜单”按钮,进入新建菜单界面。

2.在新建菜单界面中,您可以设置菜单的名称、链接和显示顺序。

3.点击“保存”按钮,保存菜单设置。

第五步:配置关注回复和自动回复在微信端设置页面的右侧,您可以找到“关注回复”和“自动回复”的设置选项。

通过配置这些选项,您可以自定义用户关注公众号后的回复内容和用户发送消息后的自动回复内容。

具体的配置方法如下:1.点击“关注回复”选项,进入关注回复设置页面。

2.在关注回复设置页面,您可以编辑关注回复的文本内容,并设置图片、链接等元素。

3.点击“保存”按钮,保存关注回复设置。

4.点击“自动回复”选项,进入自动回复设置页面。

php实现微信和支付宝支付的示例代码

php实现微信和支付宝支付的示例代码

php实现微信和⽀付宝⽀付的⽰例代码php实现微信⽀付在php下实现微信⽀付,这⾥我使⽤了EasyWeChat这⾥我是在Yii框架实现的,安装EasyWeChat插件composer require jianyan74/yii2-easy-wechat⼀:配置EasyWeChat1:在config/main.php 的 component中添加EasyWeChat的SDK'components' => [// ...'wechat' => ['class' => 'jianyan\easywechat\Wechat','userOptions' => [], // ⽤户⾝份类参数'sessionParam' => 'wechatUser', // 微信⽤户信息将存储在会话在这个密钥'returnUrlParam' => '_wechatReturnUrl', // returnUrl 存储在会话中'rebinds' => [ // ⾃定义服务模块// 'cache' => 'common\components\Cache',]],// ...]2:在config/params.php中设置基础配置信息和微信⽀付信息// 微信配置具体可参考EasyWechat'wechatConfig' => [],// 微信⽀付配置具体可参考EasyWechat'wechatPaymentConfig' => [],// 微信⼩程序配置具体可参考EasyWechat'wechatMiniProgramConfig' => [],// 微信开放平台第三⽅平台配置具体可参考EasyWechat'wechatOpenPlatformConfig' => [],// 微信企业微信配置具体可参考EasyWechat'wechatWorkConfig' => [],// 微信企业微信开放平台具体可参考EasyWechat'wechatOpenWorkConfig' => [],// 微信⼩微商户具体可参考EasyWechat'wechatMicroMerchantConfig' => [],⼆:实现微信⽀付1:微信⽀付api$data = ['body' => '',//⽀付描述'out_trade_no' => '',//订单号'total_fee' => '',//⽀付⾦额'notify_url' => '', // ⽀付结果通知⽹址,如果不设置则会使⽤配置⾥的默认地址'trade_type' => 'JSAPI',//⽀付⽅式'openid' => '',//⽤户openid];// ⽣成⽀付配置$payment = Yii::$app->wechat->payment;$result = $payment->order->unify($data);if ($result['return_code'] == 'SUCCESS') {$prepayId = $result['prepay_id'];$config = $payment->jssdk->sdkConfig($prepayId);} else {throw new yii\base\ErrorException('微信⽀付异常, 请稍后再试');}return $this->render('wxpay', ['jssdk' => $payment->jssdk, // $app通过上⾯的获取实例来获取'config' => $config]);2:在wxpay.php⽂件中发起⽀付<script src="/open/js/jweixin-1.4.0.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript" charset="utf-8">//数组内为jssdk授权可⽤的⽅法,按需添加,详细查看微信jssdk的⽅法wx.config(<?php echo $jssdk->buildConfig(array('chooseWXPay'), true) ?>);function onBridgeReady(){// 发起⽀付wx.chooseWXPay({timestamp: <?= $config['timestamp'] ?>,nonceStr: '<?= $config['nonceStr'] ?>',package: '<?= $config['package'] ?>',signType: '<?= $config['signType'] ?>',paySign: '<?= $config['paySign'] ?>', // ⽀付签名success: function (res) {// ⽀付成功后的回调函数},cancel: function(r) {//⽀付取消后的回调函数},});}if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', onBridgeReady);document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);}}else{onBridgeReady();}</script>在异步回调地址中获取微信⽀付回调只需要使⽤如下⽅法即可:$payment = Yii::$app->wechat->payment;$response = $payment->handlePaidNotify(function($message, $fail) {//⽀付结果逻辑,只有在函数⾥ return true; 才代表处理完成});$response->send();根据如上步骤就可以实现微信⽀付php实现⽀付宝⽀付⼀:在php中安装⽀付宝插件composer require alipaysdk/easysdk⼆:php实现⽀付宝⽀付1:配置⽀付宝/*** ⽀付宝配置*/public static function getOptions(){$options = new Config();$options->protocol = 'https';$options->gatewayHost = '';$options->signType = 'RSA2';$options->appId = '<-- 请填写您的AppId,例如:2019022663440152 -->';// 为避免私钥随源码泄露,推荐从⽂件中读取私钥字符串⽽不是写⼊源码中$options->merchantPrivateKey = '<-- 请填写您的应⽤私钥,例如:MIIEvQIBADANB ... ... -->';$options->alipayCertPath = '<-- 请填写您的⽀付宝公钥证书⽂件路径,例如:/foo/alipayCertPublicKey\_RSA2.crt -->';$options->alipayRootCertPath = '<-- 请填写您的⽀付宝根证书⽂件路径,例如:/foo/alipayRootCert.crt" -->';$options->merchantCertPath = '<-- 请填写您的应⽤公钥证书⽂件路径,例如:/foo/appCertPublicKey\_2019051064521003.crt -->'; //注:如果采⽤⾮证书模式,则⽆需赋值上⾯的三个证书路径,改为赋值如下的⽀付宝公钥字符串即可// $options->alipayPublicKey = '<-- 请填写您的⽀付宝公钥,例如:MIIBIjANBg... -->';//可设置异步通知接收服务地址(可选)$options->notifyUrl = "<-- 请填写您的⽀付类接⼝异步通知接收服务地址,例如:https:///callback -->";//可设置AES密钥,调⽤AES加解密相关接⼝时需要(可选)//$options->encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->";return $options;}2:实现⽀付宝⽀付//加载⽀付宝配置Factory::setOptions(self::getOptions());try {//发起API调⽤$result = Factory::payment()->wap()->pay('订单标题', '商户订单号', '订单总⾦额', '⽤户付款中途退出返回商户⽹站的地址', '⽀付回调地址');$responseChecker = new ResponseChecker();//处理响应或异常if ($responseChecker->success($result)) {//调⽤成功return $result->body;} else {//调⽤失败$errorMsg = $result->msg . $result->subMsg;throw new yii\\base\\ErrorException($errorMsg);}} catch (\\Exception $e) {throw new yii\\base\\ErrorException($e->getMessage());}根据如上就可以实现⽀付宝⽀付到此这篇关于php实现微信和⽀付宝⽀付的⽰例代码的⽂章就介绍到这了,更多相关php实现微信和⽀付宝⽀付内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

微信公众号开发之文本消息自动回复php代码

微信公众号开发之文本消息自动回复php代码

微信公众号开发之⽂本消息⾃动回复php代码本⽂实例为⼤家分享了php微信⽂本消息⾃动回复别代码,供⼤家参考,具体内容如下2.wx_sample.php初始代码<?php/*** wechat php test*///define your tokendefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();$wechatObj->valid();class wechatCallbackapiTest{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($this->checkSignature()){echo $echoStr;exit;}}public function responseMsg(){//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (!empty($postStr)){/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,the best way is to check the validity of xml by yourself */libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";if(!empty( $keyword )){$msgType = "text";$contentStr = "Welcome to wechat world!";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;}else{echo "Input something...";}}else {echo "";exit;}}private function checkSignature(){// you must define TOKEN by yourselfif (!defined("TOKEN")) {throw new Exception('TOKEN is not defined!');}$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);// use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}}>3.调⽤回复信息⽅法在wx_sample.php⽂件中注释掉$wechatObj->valid();,在其下增加⼀句“$wechatObj->responseMsg();”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微信公众平台 OAuth2.0 授权1. 2. 3. 4. 引导用户进入授权页面同意授权,获取 code 通过 code 换取网页授权 access_token(与基础支持中的 access_token 不同) 如果需要,开发者可以刷新网页授权 access_token,避免过期 通过网页授权 access_token 和 openid 获取用户基本信息第一步:用户同意授权,获取 code在确保微信公众账号拥有授权作用域(scope 参数)的权限的前提下(服务号获得高级接口后,默认带 有 scope 参数中的 snsapi_base 和 snsapi_userinfo),引导关注者打开如下页面:https:///connect/oauth2/authorize?appid=APPID&redirect_uri=RE DIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示 “该链接无法访问”, 请检查参数是否填写错误, 是否拥有 scope 参数对应的授权作用域权 限。

参考链接(请在微信客户端中打开此链接体验) Scope 为 snsapi_base https:///connect/oauth2/authorize?appid=wx520c15 f417810387&redirect_uri=http%3A%2F%%2Fphp%2Findex.用户同意授权后 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。

若用户禁止授权,则重 定向后不会带上 code 参数,仅会带上 state 参数 redirect_uri?state=STATEcode 说明 : code 作为换取 access_token 的票据, 每次用户授权带上的 code 将不一样, code 只能使用一次,5 分钟未被使用自动过期。

第二步:通过 code 换取网页授权 access_token首先请注意,这里通过 code 换取的网页授权 access_token,与基础支持中的 access_token 不同。

公众 号可通过下述接口来获取网页授权 access_token。

如果网页授权的作用域为 snsapi_base,则本步骤 中获取到网页授权 access_token 的同时,也获取到了 openid,snsapi_base 式的网页授权流程即到此 为止。

正确时返回的 JSON 数据包如下:{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refre sh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }参数 access_token expires_in refresh_token 描述 网页授权接口调用凭证,注意:此 access_token 与基础支持的 access_token 不同 access_token 接口调用凭证超时时间,单位(秒) 用户刷新 access_token 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和 openid 公众号唯一的 OpenID 用户授权的作用域,使用逗号(,)分隔scope错误时微信会返回 JSON 数据包如下(示例为 Code 无效错误):{"errcode":40029,"errmsg":"invalid code"}第三步:刷新 access_token(如果需要)由于 access_token 拥有较短的有效期, 当 access_token 超时后, 可以使用 refresh_token 进行刷新, refresh_token 拥有较长的有效期(7 天、30 天、60 天、90 天),当 refresh_token 失效的后,需要 用户重新授权。

请求方法获取第二步的 refresh_token 后,请求以下链接获取 access_token: https:///sns/oauth2/refresh_token?appid=APPI D&grant_type=refresh_token&refresh_token=REFRESH_TOKEN参数 appid grant_type refresh_token 是 是 是 是否必须 公众号的唯一标识 填写为 refresh_token 填写通过 access_token 获取到的 refresh_token 参数 说明返回说明 正确时返回的 JSON 数据包如下:{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refre sh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }参数 access_token expires_in refresh_token openid scope 描述 网页授权接口调用凭证,注意:此 access_token 与基础支持的 access_token 不同 access_token 接口调用凭证超时时间,单位(秒) 用户刷新 access_token 用户唯一标识 用户授权的作用域,使用逗号(,)分隔错误时微信会返回 JSON 数据包如下(示例为 Code 无效错误):{"errcode":40029,"errmsg":"invalid code"}第四步:拉取用户信息(需 scope 为 snsapi_userinfo)如果网页授权作用域为 snsapi_userinfo, 则此时开发者可以通过 access_token 和 openid 拉取用户信 息了。

请求方法http:GET(请使用 https 协 议) https:///sns/userinfo?access_token=ACCESS_TOKEN&openid=O PENID&lang=zh_CN参数说明参数 access_token openid lang 描述 网页授权接口调用凭证,注意:此 access_token 与基础支持的 access_token 不同 用户的唯一标识 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语返回说明 正确时返回的 JSON 数据包如下:{"openid":" OPENID", " nickname": NICKNAME, "sex":"1", "province":"PROVINCE" "city":"CITY", "country":"COUNTRY", "headimgurl": "/mmopen/g3MonUZtNHkdmzicIlibx 6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxC fHe/46", "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ] }参数 openid nickname sex province city country 用户的唯一标识 用户昵称 用户的性别,值为 1 时是男性,值为 2 时是女性,值为 0 时是未知 用户个人资料填写的省份 普通用户个人资料填写的城市 国家,如中国为 CN 用户头像, 最后一个数值代表正方形头像大小 (有 0、 46、 64、 96、 132 数值可选, 0 代表 640*640 headimgurl 正方形头像),用户没有头像时该项为空 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom) 描述privilege错误时微信会返回 JSON 数据包如下(示例为 openid 无效):{"errcode":40003,"errmsg":" invalid openid "}附:检验授权凭证(access_token)是否有效请求方法http:GET(请使用 https 协 议) https:///sns/auth?access_token=ACCESS_TOKEN&openid=OPENID参数说明参数 access_token openid描述 网页授权接口调用凭证,注意:此 access_token 与基础支持的 access_token 不同 用户的唯一标识返回说明 正确的 Json 返回结果:{ "errcode":0,"errmsg":"ok"}错误时的 Json 返回示例:{ "errcode":40003,"errmsg":"invalid openid"}具体实现代码: public function login($back_url='',$scope = 'snsapi_userinfo'){ $back_url='http://'.$_SERVER['HTTP_HOST']; $url = $this->getOauthRedirect($back_url,$scope); header('location:'.$url); if(isset($_GET['code'])){ $token = $this->getOauthAccessToken2($_GET['code']); $openid=strip_tags(str_replace("'",'',$token['openid'])); $_SESSION['open_id'] = $openid; $this->access_token=$token['access_token']; //echo $this->access_token.'<br>'.$openid;exit; $userInfo = $this->getOauthUserinfo($this->access_token,$openid); //var_dump($userInfo);exit; $callback = $_GET['state']; if ($callback){ header('location:http://'.$_SERVER['HTTP_HOST'].'/discount/sms&login='.$callback); exit; } }public function getOauthRedirect($callback,$state='',$scope='snsapi_userinfo'){ return https:///connect/oauth2/authorize?'appid='.$this->appid.'&redirect_uri='.urlencode($callback).'&response_ type=code&scope='.$scope.'&state='.$state.'#wechat_redirect'; }/** * oauth 授权跳转接口 * @param string $callback 回调 URI * @return string */ public function getOauthRedirect($callback,$state='',$scope='snsapi_userinfo'){return https:///connect/oauth2/authorize?'appid='.$this->appid.'&redirect_uri='.urlencode($callback).'&response_ type=code&scope='.$scope.'&state='.$state.'#wechat_redirect'; }public function getOauthAccessToken2($code){ if (!$code) return false; $url = https:///sns/oauth2/access_token? .'appid='.($this->appid) .'&secret='.$this->appsecret .'&code='.$code .'&grant_type=authorization_code'; $result = $this->http_get($url); //var_dump($url, $result);exit; if ($result) { $json = json_decode($result,true); if (!$json || !empty($json['errcode'])) { $this->errCode = $json['errcode']; $this->errMsg = $json['errmsg']; return false; } $this->user_token = $json['access_token']; return $json; } return false; }/** * 获取授权后的用户资料 * @param string $access_token * @param string $openid * @return array {openid,nickname,sex,province,city,country,headimgurl,privilege,[unionid]} * 注意:unionid 字段只有在用户将公众号绑定到微信开放平台账号后,才会出现。

相关文档
最新文档