名字:iwebshop微信小程序 V2.0
说明:小程序登录、注册、支付等,兼容支持原生小程序和web-view组件;
兼容性:适用于iwebshop 4.7以上所有版本
安装过程
- 安装时向
payment
数据表,添加微信小程序支付参数; - 安装时创建
plugins/payments/pay_mini_wechat/mini_wechat.php
,微信小程序支付类;
插件开启
全局增加插件类:wechatMini,其他地方可以判断:
if(class_exists('wechatMini',false)){
return true;
}else{
return false;
}
注册的拦截器:
拦截方式
提供header头
和_skey参数
两种拦截方式,关键拦截代码:
public function reg()
{
//全局登陆拦截
plugin::reg("onBeforeCreateAction",$this,'miniProgam');
//小程序web-view内挂载sdk
plugin::reg("onFinishView@simple@login",$this,"miniProgramEnv");
if(IClient::isMini()){
plugin::reg("onFinishView",$this,"onShareUrl");
}
//小程序登陆接口
plugin::reg("onBeforeCreateAction@simple@wxlogin",function(){ $this->WxLogin(); });
}
/**
* @作用:拦截小程序登陆参数,用户数据初始化给控制器(原生小程序、web-view皆可)
* @说明:提供header头和_skey参数两种拦截方式
*/
public function miniProgam(){
$controller = self::controller();
$skey = IFilter::act(IReq::get('_skey')); //小程序网页内携带过来的参数
if(empty($skey)){
//原生小程序header头
$header = self::getHeader();
if( isset($header['miniprogram-token']) && $header['miniprogram-token'] ){
$skey = $header['miniprogram-token'];
}else{
return;
}
}else{
//web-view内嵌网页
ISession::set('_from','miniProgram'); //设置小程序环境,兼容官方IClient::isMini(),用以挂载sdk,在小程序网页内登陆和支付。
if($skey =='miniProgram'){
plugin::trigger('clearUser'); //登陆过期,清理用户登陆状态(用以处理,客户端cookie与服务器登陆不同步,造成的session内openid不存在 支付失败)
return;
}
}
//取缓存内登陆数据
$data = self::getSkey($skey);
if(isset($data['session_key']) && $data['session_key'] && isset($data['openid']) && $data['openid']){
$unId = $data['openid']; //openid 用户唯一标识
if( isset($data['unionid']) && $data['unionid'] ){
//用户在开放平台的唯一标识符,在满足UnionID下发条件的情况下会返回 [注意字母大小写]
$unId = $data['unionid'];
}
self::setOpenId($unId); //设置openid用于小程序web-view网页内支付
if(isset($data['login']) && $data['login']){
###此skey已经登录过,加入登陆凭证有效校验,防止凭证泄露引发的问题
###return;
}else{
$data['login'] = 1; //设置此skey已经登录标志
self::setSkey($skey,$data,604800); //skey凭证有效期秒,过期需重新登录
}
$userRow = self::login($unId);
if(isset($userRow['id']) && isset($userRow['username']) && $userRow['id'] && $userRow['username']){
$controller->user = $userRow; //【小程序 唯一登陆点】
}
}else{
plugin::trigger('clearUser'); //登陆过期,清理用户登陆状态(用以处理,客户端cookie与服务器登陆不同步,造成的session内openid不存在 支付失败)
}
}
支持的登陆方式
- code静默登陆(用户无感知)
- 自定义登录态静默登陆(用户无感知)
- 用户授权登陆(弹出窗口需用户授权)
插件下载
小程序下载
版权属于:大卫科技Blog
本文链接:https://www.iyuu.cn/archives/60/
转载时须注明出处