注:第一部分,全网发布前的准备 请看我前面的文章
1、权限集准备:(全网发布成功后才可生效)
2、第三方收集法人微信、法人姓名、企业名称、信用代码四个商户信息外加第三方客服电话
3、企业名称需与工商部门登记信息一致;法人姓名与绑定微信银行卡的姓名一致。信息收集时要确保四个信息的对应关系,否则接口无法成功调用。
4、通过法人&企业主体校验,平台向法人微信下发模板消息。法人需在24 小时内点击消息,进行身份证信息与人脸识别信息收集;
5、信息收集完毕,验证通过后,即可创建已认证的小程序。第三方平台服务器可以收到创建 appid 信息(通过授权登录相关-授权事件接收 URL 接收信息);
6、第三方获得小程序 appid 后,可调用代码开发相关接口,完成后续的小程序代码开发。
以上6个步骤就是官方给咱们文档 ,我也只是copy主要的一部分展示 ,另外第五步,就是咱们上一篇文章里提到过的用来接收创建成功的小程序appid
依旧话不多说 ,直接上代码 快速创建小程序!!!
public static function createMini($id){
$data = DB::table('shop_legal')
->where('id',$id)
->select('name','code','code_type','legal_persona_wechat','legal_persona_name','component_phone')
->first();
$token = WxOtherController::getMiniToken();
if(!$token){
return $data = ['status'=>"error"];
}
$url = "https://api.weixin.qq.com/cgi-bin/component/fastregisterweapp?action=create&component_access_token=".$token;
//$data = json_encode($data,256);
$data = json_encode($data,JSON_UNESCAPED_UNICODE);
$res = postUrl($url,$data);
$result = json_decode($res,true, 512, JSON_BIGINT_AS_STRING);
return $result;
}
/**
* 授权事件接收URL (获取ticket与接收appid)
* @access public
*
*/
public function verify_ticket(Request $request){
........
##############(上面是获取ticket部分,上一篇有就不占地方了)#############
elseif($infoType == 'notify_third_fasteregister'){
$status = $xml->getElementsByTagName('status')->item(0)->nodeValue;
if($status == 0){
$appid = $xml->getElementsByTagName('appid')->item(0)->nodeValue;
$auth_code = $xml->getElementsByTagName('auth_code')->item(0)->nodeValue;
$str = "APPID:$appid,AUTH_CODE:$auth_code";
file_put_contents(storage_path('logs/Mini/MiniAppid.log'), '['.date('Y-m-d : h:i:s',time()).']'.$str."\r\n",FILE_APPEND);
DB::table('shop_legal')->where('id',DB::table('shop_legal')->max('id'))->update(['status'=>'1','appid'=>$appid]);
//获取授权方的帐号基本信息
$res = $this->getAuthorizerInfo($appid);
if($res['status'] == 'error'){
file_put_contents(storage_path('logs/Mini/MiniInfo.log'),'['.date('Y-m-d : h:i:s',time()).']'.$res['info']."\r\n",FILE_APPEND);
}
}else{
file_put_contents(storage_path('logs/Mini/Minierror.log'), '['.date('Y-m-d : h:i:s',time()).']'.$status."\r\n",FILE_APPEND);
if(in_array($status,array_keys(self::$info))){
$msg = self::$info[$status];
}
DB::table('shop_legal')->where('id',DB::table('shop_legal')->max('id'))->update(['msg'=>$msg,'status'=>'2']);
}
echo 'success';
}
}
/**
* 获取授权方的帐号基本信息 包括头像,昵称,帐号类型,认证类型,微信号,原始ID和二维码图片URL
* 注意:公众号和小程序的接口返回结果不一样
* @param $authorizer_appid 授权方 appid
* @access public
*
*/
public function getAuthorizerInfo($authorizer_appid)
{
$returnArray = ['status'=>'error','info'=>''];
if($componentAccessToken = self::getMiniToken()){
if($authorizer_appid){
$row = json_encode(array(
'component_appid' => self::$appId,
'authorizer_appid' => $authorizer_appid
));
$url = 'https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token='.$componentAccessToken;
$output = json_decode(postUrl($url,$row),true);
//判断授权信息并且存入数据库中
if(!empty($output['authorizer_info'])){
$info = $output['authorizer_info'];
$data = [
'create_time' => time(),
'nick_name' => $info['nick_name'],
'head_img' => array_key_exists('head_img',$info)?$info['head_img']:'',
'verify_type_info' => json_encode($info['verify_type_info']),
'user_name' => $info['user_name'],
'qrcode_url' => $info['qrcode_url'],
'business_info' => json_encode($info['business_info']),
'principal_name' => $info['principal_name'],
'signature' => $info['signature'],
'miniprograminfo' => json_encode($info['MiniProgramInfo']),
];
if(DB::table('shop_wxmini')->where('authorizer_appid',$authorizer_appid)->count()){
if(false !== DB::table('shop_wxmini')->where('authorizer_appid',$authorizer_appid)->update($data)){
$returnArray['status'] = 'success';
}else{
$returnArray['info'] = 'update error';
}
}else{
$data['authorizer_appid'] = $authorizer_appid;
if(DB::table('shop_wxmini')->insert($data)){
$returnArray['status'] = 'success';
}else{
$returnArray['info'] = 'insert error';
}
}
}else{
$returnArray['info'] = 'not found authorizer_info';
}
}else{
$returnArray['info'] = 'not found $authorizer_appid';
}
}else{
$returnArray['info'] = 'get component_access_token fail';
}
return $returnArray;
}
1.这里的 WxOtherController::getMiniToken(); 上一篇文章里有
2.JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256)
3. s t r = " A P P I D : str = "APPID: str="APPID:appid,AUTH_CODE:$auth_code"; 前者是新创建小程序appid 后者是授权码(这里多一嘴,此处的授权码就是留存,官方说最好别用)
写到这里 通过接口创建小程序已经ok啦 !!! 下一篇写授权流程
差点忘了 附上错误信息:
//声明错误信息数组
static public $info = [
"100001"=> "已下发的模板消息法人并未确认且已超时(24h),未进行身份证校验",
"100002"=> "已下发的模板消息法人并未确认且已超时(24h),未进行人脸识别校验",
"100003"=> "已下发的模板消息法人并未确认且已超时(24h)",
"101" => "工商数据返回:“企业已注销”",
"102" => "工商数据返回:“企业不存在或企业信息未更新”",
"103" => "工商数据返回:“企业法定代表人姓名不一致”",
"104" => "工商数据返回:“企业法定代表人身份证号码不一致”",
"105" => "法定代表人身份证号码,工商数据未更新,请 5-15 个工作日之后尝试",
"1000" => "工商数据返回:“企业信息或法定代表人信息不一致”",
"1001" => "主体创建小程序数量达到上限",
"1002" => "主体违规命中黑名单",
"1003" => "管理员绑定账号数量达到上限",
"1004" => "管理员违规命中黑名单",
"1005" => "管理员手机绑定账号数量达到上限",
"1006" => "管理员手机号违规命中黑名单",
"1007" => "管理员身份证创建账号数量达到上限",
"1008" => "管理员身份证违规命中黑名单",
"-1" => "企业与法人姓名不一致",
];