微信二次开发,其实就是在微信上面建设自己需要的一些板块,而这些板块是原先并没有的,也就是微信二次开发。例如大转盘、刮刮乐等这些功能也属于二次开发,去年绿萝微信就说过,微信二次开发是微信营销的营销神器,通过开发一些互动功能,促进客户的粘度,跟客户一对一的交流了解客户最真实的需求。
微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,可以通过阅读本接口文档来帮助开发。
为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个UnionID,可以在用户管理-获取用户基本信息(UnionID机制)文档了解详情。
<?php
namespace Home\Controller;
use Think\Controller;
use LaneWeChat\Core\Menu;
class MenuController extends Controller {
private $mp;
public function _initialize(){
$mp = getCurrentMp();
if(empty($mp)){
$this->error('无使用的公众号',U('mp/index'));
}else{
$this->mp = $mp;
}
}
public function index(){
$mp = $this->mp;
$data = M('mp_menu')->where("mp_id={$mp['id']}")->order('id')->select();
// dump($data);
// exit;
$data2 = $data;
foreach ($data as $k => $v) {
foreach ($data2 as $k2 => $v2) {
if($v['index'] == $v2['pindex']){
$data[$k]['sub'][] = $v2;
unset($data[$k2]);
}
}
}
// print_r($data );
// exit;
$this->assign('mpInfo',$mp);
$this->assign('list',$data);
$this->display();
}
public function access_token(){
var_dump(getAccess_token());
}
public function menuedit(){
$mp = $this->mp;
$data1 = I('post.data');
// $data2 = $data1;
// foreach ($data1 as $key1 => $value1) {
// foreach ($data2 as $key2 => $value2) {
// if($value1['index']== $value2['pindex']){
// $data1[$key1]['type']='';
// $data2[$key2]['content']='';
// break;
// }
// }
// unset($data1[$key1]['sort']);
// if($value1['type']=='event'){
// $data1[$key1]['type']=$value1['content'];
// $data1[$key1]['content'] = 'K_'.rand(100,999);
// }
// }
foreach ($data1 as &$value) {
$value['mp_id'] = $mp['id'];
}
$model = M('mp_menu');
$model->where("mp_id={$mp['id']}")->delete();
$model->addAll($data1);
include_once APP_PATH . 'LaneWeChat/lanewechat.php';
$ret = Menu::setMenu($data1);
file_put_contents('menu.txt', $ret);
if($ret === true){
$this->ajaxReturn(array('msg'=>'创建菜单成功'));
}else{
$this->ajaxReturn(array('msg'=>$ret));
}
}
//同步菜单
public function downmenu(){
$mp = $this->mp;
$mp_id = $mp['id'];
include APP_PATH . 'LaneWeChat/lanewechat.php';
$menu = Menu::getMenu($data1);
$menu = $menu['menu']['button'];
$arr = array();
$index = 1;
foreach ($menu as $key => &$value) {
$value['mp_id']= $mp_id;
$value['index'] = $index;
$value['pindex'] = 0;
$value['sort'] = $index;
if(!empty($value['sub_button'])){
$value['type'] = '';//设置一级菜单,默认值
$value['content'] = '';//设置一级菜单,默认值
$sub_menu = $value['sub_button']; //把二级菜单入到变量$sub_menu
unset($value['sub_button']);
$arr[] = $value;
$subindex = 1;
foreach ($sub_menu as $subkey=>&$subvalue) {
$subvalue['mp_id'] = $mp_id;
$subvalue['index'] = $index . $subindex;
$subvalue['pindex'] = $index;
$subvalue['sort'] = $subindex;
if($subvalue['type']== 'click'){
$subvalue['content'] = $subvalue['key'];
unset($subvalue['key']);
}else if($subvalue['type']=='view'){
$subvalue['content'] = $subvalue['url'];
unset($subvalue['url']);
}else {
$subvalue['content'] = $subvalue['type'];
$subvalue['type'] = 'event';
unset($subvalue['key']);
}
unset($subvalue['sub_button']);
$arr[] = $subvalue;
$subindex++;
}
}else{
if($value['type']== 'click'){
$value['content'] = $value['key'];
unset($value['key']);
}else if($value['type']=='view'){
$value['content'] = $value['url'];
unset($value['url']);
}else {
$value['content'] = $value['type'];
$value['type'] = 'event';
unset($value['key']);
}
unset($value['sub_button']);
$arr[] = $value;
}
$index++;
}
$model = M('mp_menu');
$model->where("mp_id={$mp['id']}")->delete();
foreach ($arr as $key => $value) {
$model->add($value);
}
$this->redirect('index');
}
//删除
public function delmenu(){
$mp = $this->mp;
include_once APP_PATH . 'LaneWeChat/lanewechat.php';
$ret = Menu::delMenu($data1);
$model = M('mp_menu');
$model->where("mp_id={$mp['id']}")->delete();
$this->redirect('index');
}
}
获取access——token
<?php
// 获取正在使用的公众号
function getCurrentmp(){
$mp = M('mp')->where("is_use=1")->find();
return $mp;
}
// 获取正在使用的公众号的access_token
function getAccess_token(){
$mp = M('mp')->where("is_use=1")->find();
if(empty($mp)) return false;
$id = $mp['id'];
if(empty($mp['access_token']) || $mp['expire_time']<time()){
$appid = $mp['appid'];
$appsecret = $mp['appsecret'];
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret;
include APP_PATH . 'LaneWeChat/lanewechat.php';
$arr = LaneWeChat\Core\Curl::callWebServer($url,'','GET');
if(isset($arr['access_token'])){
$data['access_token'] = $arr['access_token'];
$data['expire_time'] = $arr['expires_in'] + time() - 200;
M('mp')->where("id = $id")->save($data);
return $mp['access_token'];
}else{
return false;
}
}else{
return $mp['access_token'];
}
}
?>