| | |
| | | BlLifeRechargeServices, |
| | | PhoneMesssageCodeLoginInput, |
| | | RequestConfig, |
| | | ChannelOutput, |
| | | } from './lifeRechargeServices'; |
| | | import { BlLifeRechargeOptions } from './types'; |
| | | import { LifeRechargeConstants } from './lifeRechargeConstants'; |
| | | import { BlLifeRechargeAccountModel } from './lifeRechargeAccountModel'; |
| | | import { LifeRechargeListener } from './listener'; |
| | | |
| | | export class BlLifeRecharge<TResponse = any, TRequestOptions = any> { |
| | | services: BlLifeRechargeServices<TResponse, TRequestOptions>; |
| | | accountModel: BlLifeRechargeAccountModel; |
| | | listener: LifeRechargeListener; |
| | | |
| | | static constants = LifeRechargeConstants; |
| | | constants = LifeRechargeConstants; |
| | | |
| | | constructor(options: BlLifeRechargeOptions<TResponse, TRequestOptions>) { |
| | | this.services = new BlLifeRechargeServices(options); |
| | | this.accountModel = new BlLifeRechargeAccountModel({ |
| | | this.listener = new LifeRechargeListener(); |
| | | this.services = new BlLifeRechargeServices(this, options); |
| | | this.accountModel = new BlLifeRechargeAccountModel(this, { |
| | | userId: options.userId, |
| | | phoneNumber: options.phoneNumber, |
| | | channlesNum: options.channlesNum, |
| | | }); |
| | | } |
| | | |
| | | init() { |
| | | if (this.accountModel.userId) { |
| | | this.accountModel.getUserInfo(); |
| | | } |
| | | } |
| | | |
| | | async login(body: PhoneMesssageCodeLoginInput, options?: RequestConfig) { |
| | | try { |
| | | let res = await this.services.lifePayPhoneMesssageCodeLogin(body, options); |
| | | this.accountModel.setUserId(res); |
| | | this.accountModel.setUserId(res.userId); |
| | | this.accountModel.getUserInfo(); |
| | | this.accountModel.setPhoneNumber(body.phoneNumber); |
| | | return res; |
| | | } catch (error) { |
| | |
| | | loginout() { |
| | | this.accountModel.setUserId(''); |
| | | this.accountModel.setPhoneNumber(''); |
| | | this.accountModel.setUserChannles([]); |
| | | this.accountModel.isBackClientUser = false; |
| | | } |
| | | |
| | | isLogin() { |
| | |
| | | filterParValueList(parValueList: string[]) { |
| | | return parValueList.filter((x) => Number(x) <= this.MaxParValue); |
| | | } |
| | | |
| | | getCarrierByPhoneNumber(phoneNumber: string): LifeRechargeConstants.IspCode { |
| | | // 定义号段和对应的运营商 |
| | | const carrierSegments = { |
| | | [LifeRechargeConstants.IspCode.yidong]: [ |
| | | '134', |
| | | '135', |
| | | '136', |
| | | '137', |
| | | '138', |
| | | '139', |
| | | '150', |
| | | '151', |
| | | '152', |
| | | '157', |
| | | '158', |
| | | '159', |
| | | '182', |
| | | '183', |
| | | '184', |
| | | '187', |
| | | '188', |
| | | '198', |
| | | '147', |
| | | '178', |
| | | '165', |
| | | ], |
| | | [LifeRechargeConstants.IspCode.liantong]: [ |
| | | '130', |
| | | '131', |
| | | '132', |
| | | '155', |
| | | '156', |
| | | '185', |
| | | '186', |
| | | '145', |
| | | '176', |
| | | '166', |
| | | ], |
| | | [LifeRechargeConstants.IspCode.dianxin]: [ |
| | | '133', |
| | | '153', |
| | | '180', |
| | | '181', |
| | | '189', |
| | | '177', |
| | | '199', |
| | | '191', |
| | | ], |
| | | }; |
| | | |
| | | // 检查手机号是否有效(这里只简单检查长度) |
| | | if (!/^\d{11}$/.test(phoneNumber)) { |
| | | return '' as any; |
| | | } |
| | | |
| | | let prefix = phoneNumber.substr(0, 3); |
| | | for (let carrier in carrierSegments) { |
| | | if (carrierSegments[carrier].includes(prefix)) { |
| | | return carrier as LifeRechargeConstants.IspCode; |
| | | } |
| | | } |
| | | |
| | | // 如果没有找到匹配的号段,则返回未知 |
| | | return '' as any; |
| | | } |
| | | } |