Detail is the key of success

本文为程序员提供了一套从日常到年度的自我提升计划,包括每日反思与学习、每周总结与规划、每月评估与交流及年度回顾与展望等方面,旨在帮助程序员不断提升工作效率和个人能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序员每天该做的事


  1、总结自己一天任务的完成情况
  最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多。

  2、考虑自己明天应该做的主要工作
  把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作。

  3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法
  出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢。

  4、考虑自己一天工作完成的质量和效率能否还能提高
  一天只提高1%,365天你的效率就能提高多少倍你知道吗? (1+0.01)^365 = 37 倍。

  5、看一个有用的新闻网站或读一张有用的报纸,了解业界动态
  闭门造车是不行的,了解一下别人都在做什么,对自己能带来很多启示。

  6、记住一位同事的名字及其特点
  你认识公司的所有同事吗?你了解他们吗?

  7、清理自己的代码
  今天完成的代码,把中间的调试信息,测试代码清理掉,按照编码风格整理好,注释都写好了吗?

  8、清理自己的桌面
  当日事当日毕,保持清洁干劲的桌面才能让你工作时不分心,程序员特别要把电脑的桌面清理干净。

 

  程序员每周该做的事


  1、向你的老板汇报一次工作
  让你的老板知道你在做什么,这很重要。可以口头、书面、邮件,看你老板的工作方式而定。

  2、进行一次自我总结(非正式)
  这周之内自己表现得怎么样?该加分还是扣分?

  3、制定下周计划
  把下周要做的事情列出来,一样要分清楚优先级。

  4、整理自己的文件夹、书柜和电脑文件
  把桌面以外的地方也要清理干净,电脑的文件夹,收到的邮件,把过时的垃圾全部清理掉。

  5、与一个非公司的朋友沟通
  它山之石,可以攻玉。

  6、看一本杂志
  找一本适合自己的专业杂志。

  7、纠正自己或同事一个细节上的不正确做法
  《细节决定成败》看过了吗?没看过强烈建议先看看。

 

  程序员每月该做的事


  1、至少和一个同事一起吃饭或喝茶
  不光了解自己工作伙伴的工作,还要了解他们的生活。

  2、自我考核一次
  相对正式地考核自己一下,你对得起这个月的工资吗?

  3、对你的同事考核一次
  你的同事表现怎么样?哪些人值得学习,哪些人需要帮助?

  4、制定下月的计划,确定下月的工作重点

  5、总结自己工作质量改进状况
  自己的质量提高了多少?

  6、有针对性地对一项工作指标做深入地分析并得出改进的方案
  可以是对自己的,也可以是对公司的,一定要深入地分析后拿出自己的观点来。要想在老板面前说得上话,做的成事,工作上功夫要做足。

  7、与老板沟通一次
  最好是面对面地沟通,好好表现一下自己,虚心听取老板的意见,更重要的是要了解老板当前关心的重点。

 

  程序员每年该做的事


  1、年终总结
  每个公司都会做的事情,但你真正认真地总结过自己吗?

  2、兑现给自己、给家人的承诺
  给老婆、儿子的新年礼物买了没有?给自己的呢?

  3、下年度工作规划
  好好想想自己明年的发展目标,争取升职/加薪、跳槽还是自己出来干?

  4、掌握一项新技术
  至少是一项,作为程序员一年要是一项新技术都学不到手,那就一定会被淘汰。掌握可不是看本书就行的,要真正懂得应用,最好你能够写一篇教程发表到你的blog 。

  5、推出一种新产品
  可以是一个真正的产品,也可以只是一个类库,只要是你创造的东西就行,让别人使用它,也为世界作点贡献。当然如果真的很有价值,收点注册费也是应该的。

  6、与父母团聚一次
  常回家看看,常回家看看。

 
<think>我们正在解决的是用户遇到的错误:`wx.getPhoneNumberisnotafunction`。根据之前的分析和引用内容,我们可以总结以下解决方案:###错误原因分析1.**方法名拼写错误**:用户可能在代码中错误地拼写了方法名(例如,写成了`wx.getPhoneNumbe`,缺少了最后一个字母'r')。2.**基础库版本过低**:微信小程序的`getPhoneNumber`接口需要基础库版本2.21.2以上。如果用户的基础库版本低于此,则会出现该错误。3.**调用方式错误**:`getPhoneNumber`必须通过用户主动触发(例如点击按钮)来调用,不能在页面加载等非用户触发的时机直接调用。4.**未正确使用button组件**:根据引用[1],获取手机号必须使用button组件,并设置`open-type="getPhoneNumber"`,同时绑定`bindgetphonenumber`事件。###解决方案####1.检查方法名拼写确保在代码中正确拼写为`wx.getPhoneNumber`(注意完整拼写)。####2.提升基础库版本-在微信开发者工具中,可以通过设置调整基础库版本。进入详情->本地设置->调试基础库,选择2.21.2或更高版本。-对于线上版本,需要检查用户的微信版本是否支持。可以在小程序启动时进行版本检测(如之前回答中的版本比较函数),并提示用户升级微信。####3.确保通过按钮触发按照引用[1]和引用[3]的示例,使用button组件并设置正确的open-type和事件绑定:```html<buttonopen-type="getPhoneNumber"bindgetphonenumber="onGetPhoneNumber">获取手机号</button>```在对应的Page中定义事件处理函数:```javascriptPage({onGetPhoneNumber(e){//处理获取到的信息console.log(e.detail.code);//用于后端换取手机号的code}})```####4.检查登录状态(引用[4])在获取手机号之前,确保用户的登录状态(session_key)有效。如果session_key过期,需要重新登录(调用`wx.login`)获取新的code。####5.真机测试注意事项(引用[2])真机测试时,如果发布新版本,需要将手机上的小程序删除后重新搜索添加,以避免缓存导致的旧版本问题。###完整示例代码```html<!--index.wxml--><buttonopen-type="getPhoneNumber"bindgetphonenumber="getPhoneNumber">获取手机号</button>``````javascript//index.jsPage({onLoad:function(){//在页面加载时预先登录,确保有有效的session_keywx.login({success:(res)=>{this.setData({code:res.code});}});},getPhoneNumber(e){if(e.detail.code){//将code发送到后端换取手机号wx.request({url:'https://your.domain.com/decodePhone',method:'POST',data:{code:e.detail.code,//如果需要,也可以传递之前登录得到的code(但通常这里只需要e.detail.code)},success:(res)=>{console.log('手机号:',res.data.phone);}});}else{console.error('获取手机号失败:',e.detail.errMsg);}}});```###后端解密示例(Node.js)```javascriptconstaxios=require('axios');const{WX_APPID,WX_SECRET}=require('./config');app.post('/decodePhone',async(req,res)=>{const{code}=req.body;//使用code换取session_keyconsturl=`https://api.weixin.qq.com/sns/jscode2session?appid=${WX_APPID}&secret=${WX_SECRET}&js_code=${code}&grant_type=authorization_code`;constresponse=awaitaxios.get(url);constsessionKey=response.data.session_key;//注意:实际获取手机号需要的是getPhoneNumber事件回调中的code,这个code可以直接用来换手机号信息//这里我们实际上不需要再换一次session_key,因为getPhoneNumber返回的code可以直接用(微信服务器会返回手机号信息)//但是,微信的接口要求我们用session_key来解密encryptedData和iv(旧版),而新版直接使用code即可。//根据微信文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html//新版本(2022年之后)推荐直接使用code来获取手机号,不需要解密。//所以,后端只需要将code发送到微信接口:constphoneUrl=`https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN`;//注意:ACCESS_TOKEN需要通过appid和secret获取(常规access_token)//具体步骤:先获取access_token,然后调用这个接口constaccessToken=awaitgetAccessToken();//自行实现获取access_tokenconstphoneResponse=awaitaxios.post(phoneUrl,{code:code//这里就是e.detail.code},{params:{access_token:accessToken}});//返回手机号res.json({phone:phoneResponse.data.phone_info.phoneNumber});});```###权限配置在`app.json`中声明权限:```json{"permission":{"scope.userPhoneNumber":{"desc":"你的权限描述"}}}```###真机调试问题处理-删除手机上的旧版小程序,重新搜索添加。-在开发者工具中,设置不校验合法域名(测试时)。-确保基础库版本设置正确(2.21.2以上)。###总结流程图```mermaidgraphTDA[报错:wx.getPhoneNumberisnotafunction]-->B{检查拼写}B-->|拼写错误|C[修正为正确拼写]B-->|拼写正确|D{检查基础库版本}D-->|低于2.21.2|E[提升基础库版本]D-->|符合要求|F{检查调用方式}F-->|非按钮触发|G[改为按钮触发]F-->|按钮触发|H{检查登录状态}H-->|session_key失效|I[重新登录]H-->|session_key有效|J[正常获取]```###引用说明-引用[1]:说明必须使用button组件并绑定事件。-引用[2]:真机测试需要删除旧版小程序。-引用[3]:提供了button组件的写法示例。-引用[4]:强调了登录状态的重要性,需要在获取手机号前确保session_key有效。-引用[5]:提到了权限问题,但与本问题关联不大。###相关问题1.微信小程序获取用户手机号需要哪些前置条件?2.如何处理真机调试中的`createEventisnotafunction`错误?3.微信小程序权限申请的最佳实践是什么?4.如何在不同基础库版本中保持小程序兼容性?5.`WxMaUserService`解密手机号失败有哪些常见原因?</think>### 解决 `wx.getPhoneNumber is not a function` 错误的完整方案 #### 错误原因分析 1. **方法名拼写错误** 检查代码中是否存在拼写错误(如 `wx.getPhoneNumbe` 缺少最后一个字母 `r`),正确方法名为 `wx.getPhoneNumber`[^1]。 2. **基础库版本过低** `wx.getPhoneNumber` 需要基础库 ≥ 2.21.2: ```javascript // 在app.js中检查版本 const version = wx.getSystemInfoSync().SDKVersion; if (compareVersion(version, '2.21.2') < 0) { wx.showToast({ title: '请升级微信版本' }); } ``` 3. **未使用按钮组件触发** 该方法必须通过 `<button>` 组件触发[^1][^3]: ```html <!-- 正确调用方式 --> <button open-type="getPhoneNumber" bindgetphonenumber="onGetPhoneNumber"> 获取手机号 </button> ``` 4. **未正确处理登录状态** 需要确保 `wx.login` 已执行且 `session_key` 有效[^4]: ```javascript Page({ onLoad() { // 提前登录获取code wx.login({ success: res => this.setData({ code: res.code }) }); }, onGetPhoneNumber(e) { wx.checkSession({ success: () => console.log('session有效'), fail: () => wx.login() // 重新登录 }) } }) ``` #### 完整解决方案 ##### 前端代码示例 ```html <!-- index.wxml --> <button open-type="getPhoneNumber" bindgetphonenumber="handlePhoneNumber" > 获取手机号 </button> ``` ```javascript // index.js Page({ data: { code: '' }, onLoad() { // 预先获取登录凭证 wx.login({ success: res => this.setData({ code: res.code }) }) }, // 手机号获取回调 handlePhoneNumber(e) { if (e.detail.code) { wx.request({ url: 'https://your-api.com/get-phone', method: 'POST', data: { code: e.detail.code, loginCode: this.data.code // 传递登录凭证 }, success: res => console.log('手机号:', res.data.phone) }) } else { console.error('失败原因:', e.detail.errMsg) } } }) ``` ##### 后端解密示例(Node.js) ```javascript const axios = require('axios'); app.post('/get-phone', async (req, res) => { const { code, loginCode } = req.body; // 1. 获取session_key const sessionRes = await axios.get( `https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=${loginCode}` ); // 2. 解密手机号 const result = await axios.post( 'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=TOKEN', { code } ); res.json({ phone: result.data.phone_info.purePhoneNumber }); }); ``` #### 关键注意事项 1. **真机调试处理** 删除手机端旧版小程序后重新安装测试[^2]: ```mermaid graph LR A[报错] --> B{删除小程序} B --> C[重新搜索] C --> D[安装新版] D --> E[测试通过] ``` 2. **权限声明** 在 `app.json` 添加权限声明: ```json { "permission": { "scope.userPhoneNumber": { "desc": "用于绑定您的手机号" } } } ``` 3. **版本兼容处理** 使用动态检测: ```javascript function compareVersion(v1, v2) { v1 = v1.split('.').map(Number) v2 = v2.split('.').map(Number) for (let i = 0; i < 3; i++) { if (v1[i] > v2[i]) return 1; if (v1[i] < v2[i]) return -1; } return 0; } ``` #### 错误排查流程 ```mermaid graph TD A[wx.getPhoneNumber is not a function] --> B{检查拼写} B -->|错误| C[修正为正确拼写] B -->|正确| D{检查基础库版本} D -->|低于2.21.2| E[提示用户升级微信] D -->|符合要求| F{检查调用方式} F -->|非按钮触发| G[改用button绑定事件] F -->|按钮触发| H{检查session_key} H -->|已失效| I[重新执行wx.login] H -->|有效| J[检查后端解密] ``` [^1]: 必须使用button组件并绑定事件 [^2]: 真机测试需删除旧版小程序 [^3]: 按钮组件调用示例 [^4]: 需要提前获取登录凭证 --- ### 相关问题解答 1. **微信小程序获取用户手机号需要哪些前置条件?** - 基础库版本 ≥ 2.21.2 - 在 `app.json` 声明 `scope.userPhoneNumber` 权限 - 通过按钮组件触发(`<button open-type="getPhoneNumber">`) - 有效的登录状态(`wx.login` 获取的 `code`) - 后端服务支持手机号解密接口 2. **如何处理真机调试中的 `createEvent is not a function` 错误?** - 删除手机端旧版小程序并重新安装[^2] - 在开发者工具中清除缓存:点击工具栏"清除缓存"→"全部清除" - 确保开发工具基础库版本 ≥ 2.21.2 - 检查事件绑定语法是否正确(如 `bindgetphonenumber` 非 `bindGetPhoneNumber`) 3. **微信小程序权限申请的最佳实践?** ```javascript // 1. 首次静默申请 wx.authorize({ scope: 'scope.userPhoneNumber', success() { /* 已授权 */ }, fail() { /* 引导用户手动授权 */ } }) // 2. 用户拒绝后引导开启 wx.showModal({ title: '权限申请', content: '需要手机号权限才能继续', success(res) { if (res.confirm) wx.openSetting() } }) ``` 4. **如何在不同基础库版本中保持兼容性?** - 使用 `wx.getSystemInfoSync().SDKVersion` 检测版本 - 对低版本提供备用方案(如手机号输入框) - 封装版本检测工具函数: ```javascript function isFeatureSupported(featureName) { const features = { getPhoneNumber: '2.21.2', // 添加其他功能支持版本 } return compareVersion(wx.getSystemInfoSync().SDKVersion, features[featureName]) >= 0; } ``` 5. **`WxMaUserService` 解密手机号失败常见原因?** - `session_key` 过期(需重新调用 `wx.login`) - 前端传递的加密数据与 `iv` 不匹配 - 微信API调用频率超限(每小时最多200次) - 服务器时间与微信服务器不同步(误差 > 5分钟) - 前端获取的 `code` 已使用过(每次解密需新 `code`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值