当前位置: 首页 > news >正文

微信小程序之手机归属地查询

微信小程序之手机归属地查询

需求描述

在这里插入图片描述

API申请和小程序设置

API申请

第一步:完整账号注册
我们需要来到如下网站,注册账号:万维易源

第二步:账号注册完成以后,点击右上角的控制台信息。
在这里插入图片描述
第三步:在控制台界面选择接口使用者-appKey管理
在这里插入图片描述
第四步:在appKey管理界面,点击添加按钮,在应用中输入自己想要的名字,白名单非必填,可调用接口搜索手机可以查询到对应的如下信息,选择以后点击“立即创建”。
在这里插入图片描述
第五步:设置以后,我们便可以看到我们常见的appKey了。
在这里插入图片描述

小程序设置

在小程序中,我们应用的API不是随便能够使用的,是需要在小程序中进行设置才能够使用。
第一步:登录小程序管理后台:微信公众平台
第二步:在小程序后台点击管理-开发管理中的开发设置
在这里插入图片描述
第三步:在开发设置中鼠标滚轮往下拉找到服务器域名设置,然后点击右侧修改按钮,在request合法域名中讲我们设置的需要的api加入进去,结果如下
在这里插入图片描述
至此,我们的API Key的申请以及小程序的设置已经完成,我们可以正式开发我们的业务。

业务实现

代码框架

我们的业务代码框架如下
在这里插入图片描述

代码实现
app.json实现

总体基调设置如下

{"pages": ["pages/index/index","pages/logs/logs" ],"window": {"backgroundTextStyle": "dark","navigationBarBackgroundColor": "#FFFFFF","navigationBarTitleText": "手机号码归属地查询","navigationBarTextStyle": "black"},"sitemapLocation": "sitemap.json"
}
util.js实现
const formatTime = date => {const year = date.getFullYear()const month = date.getMonth() + 1const day = date.getDate()const hour = date.getHours()const minute = date.getMinutes()const second = date.getSeconds()return [year, month, day].map(formatNumber).join('') + '' + [hour, minute, second].map(formatNumber).join('')
}const formatNumber = n => {n = n.toString()return n[1] ? n : '0' + n
}module.exports = {formatTime: formatTime
}
index.wxml实现

界面布局实现

<!--pages/index/index.wxml-->
<view class='tel'><view class='input'><input type='number'placeholder='请输入查询的手机号'bindinput='bindInput'></input></view><view class='button'><button bindtap='bindSearch'>查询</button></view><view class='info'><text>温馨提示:查询结果仅供参考,以当地营业厅查询结果为</text></view><view class='result_caption'><text>{{ret_code}}</text></view><view class='result' hidden='{{hidden}}'><view class='row bg'>所查号码</view><view class='row bg'>{{number}}</view><view class='row'>归属省</view><view class='row'>{{prov}}</view><view class='row bg'>归属地区</view><view class='row bg'>{{city}}</view><view class='row'>运营商</view><view class='row'>{{name}}</view><view class='row bg'>城市编码</view><view class='row bg'>{{cityCode}}</view><view class='row'>邮政编码</view><view class='row'>{{postCode}}</view></view>
</view>
index.wxss实现

界面样式实现

/* pages/index/index.wxss */
.tel {width: 70%;margin: 0 auto;font-size: 30rpx;
}
.tel view {margin: 15rpx 0;
}
.input input {border: 1rpx solid #eee;background-color: #eee;padding: 18rpx;border-radius: 8rpx;color: #666;
}
.button button {background-color: #0080ff;color: white;
}
.info text {color: #999;font-size: 24rpx;
}
.result_caption text {color: #0080ff;
}
.result {display: flex;flex-wrap: wrap;color: #666;border: 1rpx solid #999;
}
.result .row {flex-basis: 50%;box-sizing: border-box;margin: 0;padding: 10rpx;
}
.result .bg {background-color: #eee;
}
index.js实现

业务实现如下

// pages/index/index.js
const util = require('../../utils/util.js');
Page({/*** 页面的初始数据*/data: {//APPIDappid: '上述API申请的ID',//密钥sign: '上述API申请的签名',//当前查询的时间timesTamp : util.formatTime(new Date()),//手机号码number : '',//默认隐藏hidden:true,//省份prov: '',//城市city: '',//卡类型name: '',//判断ret_code: '',},//输入手机号bindInput : function (e) {//查询得到手机号this.setData({number : e.detail.value});},//查询号码bindSearch : function (e) {var that = this;//请求wx.request({url: 'https://route.showapi.com/6-1?num=' + that.data.number + '&showapi_appid=' + that.data.appid + '&showapi_timestamp=' + that.data.timesTamp + '&showapi_sign=' + that.data.sign,success : function (e) {//获取归属地数据var result = e.data.showapi_res_body;//判断手机号码是否合法if (result.ret_code == -2) {that.setData({ret_code: '对不起,您查询的号码有误!',hidden : true});} else {that.setData({ret_code: '结果如下:',hidden: false,prov: result.prov,city: result.city,name: result.name,postCode: result.postCode,cityCode: result.cityCode});}}})},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}
})

我们可以看到通过API调用返回的结果如下
在这里插入图片描述
至此我们完成手机归属地的开发内容。

相关文章:

微信小程序之手机归属地查询

微信小程序之手机归属地查询 需求描述 API申请和小程序设置 API申请 第一步&#xff1a;完整账号注册 我们需要来到如下网站&#xff0c;注册账号&#xff1a;万维易源 第二步&#xff1a;账号注册完成以后&#xff0c;点击右上角的控制台信息。 第三步&#xff1a;在控制…...

ElementUI 问题清单

1、form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为&#xff0c;给el-form 加上submit.native.prevent就行了。 <el-form inline submit.native.prevent><el-form-item label"订单号"><el-inputv-model"query.order…...

DVWA靶场——XSS(Stored)

一&#xff0c;Stored XSS 漏洞详解 存储型跨站脚本攻击&#xff08;Stored XSS&#xff0c;或称为 Persistent XSS&#xff09; 是一种常见的跨站脚本攻击&#xff08;XSS&#xff09;类型&#xff0c;它通过将恶意脚本&#xff08;通常是 JavaScript 代码&#xff09;直接存储…...

Spring框架中的Bean是线程安全的吗?

概述 在Java开发中&#xff0c;Spring框架是一个广泛使用的轻量级控制反转&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;容器框架。它简化了企业级应用的开发&#xff0c;提供了丰富的功能&#xff0c;如依赖注入、事务管理、消息传递等。在Spring框架中…...

uniapp远程摄像头流界面上显示

用到的插件&#xff1a;dplayer、hls dplayer官网&#xff1a;dplayer dplayer官网npm安装的是最新版本&#xff08;1.27.1&#xff09;&#xff0c;真机运行异常了&#xff0c;可以安装历史版本 dplayer历史版本 远程摄像头视频流格式&#xff1a;m3u8 可以用来测试的视频流&a…...

elasticSearch(一):elasticSearch介绍

一、搜索引擎 搜索引擎的核心目的是帮助用户以最小的成本才海量数据中找到最想要的结果。糟糕的搜索引擎往往会所问非所答&#xff0c;用户查了半天也得不到自己想要的&#xff0c;好的搜索引擎往往第一页就是用户最想要的结果。而目前判断搜索引擎好坏一般是从召回率、精确率…...

基于 RWKV 的视觉语言模型 VisualRWKV 被 COLING 2025 接收!

基于 RWKV 的视觉语言模型 VisualRWKV 被 COLING 2025 接收&#xff01; COLING&#xff0c;国际计算语言学会议&#xff08;International Conference on Computational Linguistics&#xff09;&#xff0c;是自然语言处理和计算语言学领域的顶级国际会议&#xff08;CCF 推…...

输出九九乘法表:JAVA

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 输出九九乘法表。 具体的输出格式见样例&#xff0c;其中每一项乘法的结果需要占据2个字符宽度&#xff0c;不同的乘法结果之间用1个空格间隔。 举例&#xff1a; 1*4_4_2*4_8_3*412_4*416 上…...

kube-proxy的iptables工作模式分析

系列文章目录 iptables基础知识 文章目录 系列文章目录前言一、kube-proxy介绍1、kube-proxy三种工作模式2、iptables中k8s相关的链 二、kube-proxy的iptables模式剖析1.集群内部通过clusterIP访问到pod的流程1.1.流程分析 2.从外部访问内部service clusterIP后端pod的流程2.1…...

xiaolin coding 图解 MySQL笔记——锁篇

1. 全局锁是怎么用的&#xff1f; flush tables with read lock 执行以后&#xff0c;整个数据库就处于只读状态了&#xff0c;这时其他线程执行对数据的增删改操作&#xff08;insert、delete、update&#xff09;&#xff1b;对表结构的更改操作&#xff08;alter table、dr…...

11-SpringCloud Alibaba-Seata处理分布式事务

一、Seata基本介绍 官网&#xff1a;https://seata.apache.org/zh-cn/ Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 我…...

更换 Git 项目的远程仓库地址(五种方法)

更换 Git 项目的远程仓库地址有几种不同的方法&#xff0c;下面是详细的步骤和一些额外的方法来完成这个任务。 方法1&#xff1a;使用 git remote set-url 这是最直接的方法。假设你想要更改名为 origin 的远程仓库地址到新的 URL。 查看当前的远程仓库配置&#xff1a; git…...

3大模块助力学生会视频自动评审系统升级

一、项目背景 传统的学生会视频作品或电子申请材料评审由老师线下逐一面审完成。面对大量学生提交的作品&#xff0c;评审效率低、耗时长&#xff0c;且主观性较强。为此&#xff0c;客户希望开发一个基于AI的线上自动面审系统&#xff0c;从语法正确性、演讲流利度和发音准确…...

鸿蒙开发——使用ArkTs处理XML文本

1、概 述 XML&#xff08;可扩展标记语言&#xff09;是一种用于描述数据的标记语言&#xff0c;旨在提供一种通用的方式来传输和存储数据&#xff0c;特别是Web应用程序中经常使用的数据。XML并不预定义标记。因此&#xff0c;XML更加灵活&#xff0c;并且可以适用于广泛的应…...

【Linux】文件查找 find grep

文章目录 1. 引言简介Linux文件系统的基本概念为什么文件查找命令在日常使用中非常重要 2. find 命令基本用法常见选项和参数高级用法和技巧实际示例 3. locate 命令如何工作与find命令的区别安装和使用locate实际示例 4. grep 结合文件查找使用grep进行内容查找结合find命令使…...

Go学习笔记之运算符号

算数运算符 运算符描述相加-相减*相乘/相除%求余自增–自减 代码示例&#xff1a; package mainimport "fmt"func main() {// 算数运算符a : 1b : 2fmt.Println(a b) // 加 3fmt.Println(a - b) // 减 -1fmt.Println(a * b) // 乘 2fmt.Println(a / b) // 除 0fm…...

npm : 无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本

要以管理员身份打开PowerShell&#xff0c;请按照以下步骤操作&#xff1a; 在Windows搜索框中查找PowerShell&#xff1a; 在任务栏上&#xff0c;点击左下角的Windows徽标&#xff08;或按Win S键&#xff09;以打开搜索框。输入“PowerShell”以查找PowerShell应用程序。右…...

YOLOv8-ultralytics-8.2.103部分代码阅读笔记-torch_utils.py

torch_utils.py ultralytics\utils\torch_utils.py 目录 torch_utils.py 1.所需的库和模块 2.def torch_distributed_zero_first(local_rank: int): 3.def smart_inference_mode(): 4.def autocast(enabled: bool, device: str "cuda"): 5.def get_cpu_i…...

Java中的数据存储结构解析与应用

一、引言 在Java编程中&#xff0c;数据存储结构是程序设计的基础。合理选择和使用数据结构可以提高程序的性能和可维护性。本文将带您了解Java中的各种数据存储结构&#xff0c;并探讨其优缺点及适用场景。 二、基本数据类型 Java提供了8种基本数据类型&#xff0c;分别是b…...

【链表】力扣 141. 环形链表

一、题目 二、思路 龟兔进行赛跑 龟的速度是 1&#xff0c;兔的速度是 2龟兔从同一起点出发&#xff0c;若 龟追上兔 则说明 有环 存在&#xff1b;若追不上&#xff0c;则说明无环。 三、代码 /*** Definition for singly-linked list.* class ListNode {* int val;* …...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...