iwebshop商城,微信小程序插件,登录、注册、支付等,兼容支持原生小程序和web-view组件

名字: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;
}

注册的拦截器:
注册的拦截器.png

拦截方式

提供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静默登陆(用户无感知)
  • 自定义登录态静默登陆(用户无感知)
  • 用户授权登陆(弹出窗口需用户授权)

插件下载


iwebshop微信小程序插件.rar

小程序下载


miniProgram.rar

最后修改:2024 年 05 月 09 日 10 : 00 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论