场景:每当要客户的小程序操作些啥都要客户扫码,如果客户一多,是真的烦,客户爱答不理,简直就是浪费生命啊!既然是平台开发是获得了客户的授权的,那么就可以利用第三方的接口直接操作了!实现的效果是:既可以批量搬客户操作,又可以单独商户操作,爽吧!
//商户申请插件 (申请最近插件)
public function actionStorePluginsBinding()
{
//获取插件模版APPID
$version_info = Plugins::find()->where(['store_id' => \Yii::$app->request->post('store_id')])->orderBy(' id desc ')->one();
$store_id = array_column(Store::find()->alias('s')->where([
'AND',
['!=', 's.admin_id', \Yii::$app->admin->id],
['s.is_delete' => 0],
['s.id' =>\Yii::$app->request->post('store_id')],
['a.is_delete' => 0],
['!=','w.app_id','0'],
['!=','w.app_brand_user_name','0'],
])->leftJoin(['a' => Admin::tableName()], 's.admin_id=a.id')->leftJoin(['w' => WechatApp::tableName()], 's.wechat_app_id=w.id')->select('s.id')->asArray()->all(),'id');
$errArr = [
'-1' => '系统繁忙,请等待修复',
'89236' => '该插件不能申请',
'89237' => '已经添加该插件',
'89238' => '申请或使用的插件已经达到上限',
'89239' => '该插件不存在(或已删除)',
'89243' => '该申请为“待确认”状态,不可删除',
'89244' => '不存在该插件 appid',
'89256' => 'token 信息有误',
'89257' => '该插件版本不支持快速更新',
'89258' => '当前小程序帐号存在灰度发布中的版本,不可操作快速更新',
'41001'=>'access_token missing hints'
];
$arr = is_array($store_id) ? $store_id : [$store_id];
$code = 0;
$msg = '';
for ($i = 0; $i < count($arr); $i++) {
$this->getStore($arr[$i]);
//插件绑定
$audit = StorePlugins::find()->where(['store_id' => $arr[$i], 'plugin_app_id' => $version_info['app_id']]);
$audit->andWhere(['or', 'status=1','status=2']); //状态1申请中,2成功,-1默认
$audit = $audit->orderBy('id desc')->one();
if ($audit) {
$code = 1;
$msg .= '【' . $this->store->name . '】已提交过申请<br/>';
continue;
}
$wechatApi = new WechatApi($this->getAccessToken());
$data = $wechatApi->postPluginsConfig('apply',$version_info['app_id']);
//记录绑定日志
if ($data['errcode'] == 0) {
$storePlugins = new StorePlugins();
$storePlugins->store_id = $arr[$i];
$storePlugins->plugin_app_id = $version_info['app_id'];
$storePlugins->addtime = time();
$storePlugins->status=1;
$storePlugins->errcode='申请成功';
$storePlugins->save();
} else {
$code = $data['errmsg'];
$errmsg = $errArr[$data['errcode']];
$msg .= '【' . $this->store->name . '】' . $errmsg . '<br/>';
if($data['errcode']=='89237'){
$storePlugins = new StorePlugins();
$storePlugins->store_id = $arr[$i];
$storePlugins->plugin_app_id = $version_info['app_id'];
$storePlugins->addtime = time();
$storePlugins->errcode = $errmsg;
$storePlugins->status=2;
$storePlugins->save();
}else{
$storePlugins = new StorePlugins();
$storePlugins->store_id = $arr[$i];
$storePlugins->plugin_app_id = $version_info['app_id'];
$storePlugins->addtime = time();
$storePlugins->errcode = $errmsg;
$storePlugins->status=0;
$storePlugins->save();
}
}
}
return [
'code' => $code,
'msg' => $msg ?: '已经申请插件请等待生效'
];
}
public function postPluginsConfig($action, $plugin_appid = null)
{
$url = self::WX_PLUGINS_URL . "?access_token={$this->access_token}";
$data = ['action' => $action, 'plugin_appid' => $plugin_appid];
$curl = new CurlHelper();
$res = json_decode($curl->post($url, json_encode($data)), true);
return $res;
}
access_token是客户小程序的access_token;具体接入请看文档;这里只介绍了思路!