微信小程序-卡券开发(前端)
刚完成一个微信小程序卡券开发的项目。下面记录开发前,自己困惑的几个问题。
因为我只负责了前端。所以下面主要是前端的工作。
项目概述:按照设计图开发好首页上的优惠券列表,点击某个优惠券,输入手机号,点击领取,调用 wx.addCard()接口,跳到微信的领取卡券页面。
点击首页的某处按钮,点击后,调用wx.openCard()接口,打开已领取的卡券列表页。
1、小程序提供的 wx.addCard() ,如果调用成功,打开的界面,长下面这个样子。(微信本身就有的页面)
如果点击了返回,没有点击“领取到卡包”。此时是没有领取成功的。

2、小程序提供的 wx.openCard() ,如果调用成功,打开的界面,长下面这个样子。(微信本身就有的页面)

3、开发流程(后续补充):
1) 获取openId。
在app.json文件中,前端调用wx.request(),发送code至自己公司后台提供的接口,获取openId,存到缓存中,为了确保其他页面能获取到。我也存到了一个公共变量中。
2) 按照微信提供的API说明,传必要参数。
领取卡券的前端处理:
① 先判断当前微信版本是否支持领取卡券这个api
if ( wx.addCard ) { 如果支持的话,就调用领取卡券的接口 } else { 不支持的话,弹出更新提示 }
② 调用领取卡券的接口
下面是我实际调用这个接口时,传入的参数
if (wx.addCard) {
//领取卡券接口
wx.addCard({
cardList: [
{
cardId: card_id,
cardExt: '{"nonce_str": "'+ result.data.sign.nonce_str +'", "openid": "'+ openid +'", "timestamp": "'+ result.data.sign.timestamp +'", "signature":"'+ result.data.sign.signature +'"}'
}
],
success: function(res) {
if(res.cardList.length > 0) {
if(res.cardList[0].isSuccess) {
var get_card_id = res.cardList[0].cardId;
var get_code = res.cardList[0].code;
//将领取成功结果返回至服务器
wx.request({
url: '服务器接口地址',
method: 'POST',
data: {
mobile: user_phone,
openid: openid,
card_id: get_card_id,
code: get_code
},
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: function(result) {
if(result.data.error_code != 200) {
//error处理
}
//领取完,跳回首页
wx.reLaunch({
url: '../index/index'
})
}
})
}
}
},
fail: function() {
//领取失败,跳回首页
wx.reLaunch({
url: '../index/index'
})
}
})
} else {
// 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
wx.showModal({
title: '提示',
content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
})
}
参数说明:
cardId:是从后台接口获取到的数据。
timestamp:是从后台获取的时间戳。
nonce_str: 是从后台获取的数据。
openid:在小程序app.js文件中,调用 wx.login()接口,发送code至后台,获取openId,保存到缓存中。(为了防止取不到,我也存到了自定义的全局变量中)
在这里需要用时,就取出openId
signature: 是从后台获取的数据。
success:在这个函数中,我将领取成功结果返回至了服务器(后台提供的接口,参数因项目而异。我们是要求传回手机号,openId,card_id,和code 。这里的card_id 和 code,是success函数中返回的结果)
success, 其实也就是点击“领取到卡包”后触发的函数。
凡是需要调用 api.weixin.qq.com这个接口获取的数据,都要由后台调用,返回给前端。前端无法直接调用。
4、踩的坑
1)点击领取后,接口调用成功,就要设置按钮不可点击。否则多次快速点击,微信卡包中,卡券列表里会出现多次重复领取的卡券。
2)用自己的appId登录开发者工具,查看公司的小程序项目时,会报错。因为后台服务器使用的是公司小程序的 appsecret 获取的 accesstoken。和自己的appId对不上,就调不了接口。
解决:开通公司小程序的开发权限,用公司的appId登录开发者工具。注意,先选择小程序文件,然后再输入appId。因为如果之前已经打开过这个小程序,再次导入小程序文件时,appId会自动输入之前的appId记录。先输入appId ,有可能会被自动改掉。
3) 注意遇到的几个code的含义,注意区分。
......做项目时,想写的很多,做完了,突然词穷了。等有人问,或者我自己想,再慢慢补充吧 ==||
①
微信小程序-卡券开发(前端)的更多相关文章
- Spring+微信小程序 卡券打通
近期公司项目需要使用到微信卡券模块,主要做的是在小程序打通微信卡券,实现小程序领取卡券的功能效果. 简单说下涉及的东西: Springboot—使用springboot做后端接口,非常便捷 并且根本是 ...
- 小程序语音红包开发中 汉字转拼音的问题 微信小程序红包开发遇到的坑
公司最近在开发微信小程序的红包功能,语音红包需要用到文字转拼音的功能. 之前介绍过怎么将中文的汉字转为拼音的,具体看下面这篇文章. 微信语音红包小程序开发如何提高精准度 红包小程序语音识别精准度 微信 ...
- 微信小程序从零开始开发步骤(八)引入框架WeUI
首先来看下WeUI的官方介绍: WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一.在微信小程序的开发过程中,涉及到的前端 ...
- 微信小程序从零开始开发步骤(四)
上一章节,实现了小程序的底部导航的功能,这一节开始实现一些简单的功能.本章节介绍的是小程序的自定义分享的功能. 可以分享小程序的任何一个页面给好友或群聊.注意是分享给好友或群聊,并没有分享到朋友圈.一 ...
- 微信小程序从零开始开发步骤(三)
上一章节,我们分享了如何创建一个新的页面和设置页面的标题,这一章我们来聊聊底部导航栏是如何实现的.即点击底部的导航,会实现不同对应页面之间的切换. 我们先来看个我们要实现的底部导航栏的效果图:(三个导 ...
- 微信小程序从零开始开发步骤(二)
上一章注册完小程序,添加新建的项目,大致的准备开发已经完成,本章要分享的是要创建一个简单的页面了,创建小程序页面的具体几个步骤: 1. 在pages 中添加一个目录 选中page,右击鼠标,从硬盘打开 ...
- 微信小程序从零开始开发步骤(一)
从零到有写一个小程序系列专题,很早以前就想写来分享,但由于项目一直在进展,没有过多的时间研究技术,现在可以继续分享了.1:注册用没有注册过微信公众平台的邮箱注册一个微信公众号, 申请帐号 ,点击 ht ...
- BeautyWe.js 一套专注于微信小程序的开发范式
摘要: 小程序框架... 作者:JerryC 原文:BeautyWe.js 一套专注于微信小程序的开发范式 Fundebug经授权转载,版权归原作者所有. 官网:beautywejs.com Repo ...
- 《微信小程序商城开发实战》笔者的新书,欢迎各位粉丝上京东购买
作者图书京东链接,请点击------>>> **微信小程序商城开发实战** 附京东真实评价截图: 编辑推荐 在当今移动互联网大潮中,微信应用凭借其庞大的用户基数和极强的用户黏性 ...
随机推荐
- python之路《模块》
1.time模块 FUNCTIONS asctime(...) asctime([tuple]) -> string Convert a time tuple to a string, e.g. ...
- 自动化测试_移动端测试(二)—— Appium原理
一.什么是Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver ...
- time和random模块
# 时间模块 # 三种时间表现形式 # 时间戳 # 格式化的时间字符串 # 元组(struct_time)结构化时间 struct_time元组共有9个元素(年,月,日,时,分,秒,一年中的第几周,一 ...
- 【剑指offer】面试题68(补充) 0到n-1中缺失的数字(二分法的进一步应用)
题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内. 在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 输出 输入:[0,1,2, ...
- javascript九宫格碰撞检测
JS九宫格碰撞检测这个东西 以前学过 这次主要是做面试项目web版的win10 桌面图片需要用碰撞检测 再写的时候竟然完全忘记了碰撞检测原理 和怎么写 综合来说还是写的太少 今天再学了一下 理 ...
- metasploit2 - vsftpd 漏洞攻击和拿shell
一.环境说明 目标IP: 本人虚拟机 192.168.80.134 ,使用 metasploit2 攻击IP: 本人虚拟机 192.168.80.129 ,使用 kali Metasploitable ...
- PHP 使用gd库给图片加图片水印,文字水印,并返回路径
//图片水印 $mark_filename = './02.jpg'; //获取图片信息 $info = getimagesize($mark_filename); //获取图片的后缀 $type = ...
- 面试老被问LinkedList源码?看看阿里技术官是怎么深度剖析的吧!
前言 LinkedList底层是基于双向链表,链表在内存中不是连续的,而是通过引用来关联所有的元素,所以链表的优点在于添加和删除元素比较快,因为只是移动指针,并且不需要判断是否需要扩容,缺点是查询和遍 ...
- 都0202了,还在问Vegas和Pr哪个好?
自媒体时代,蕴藏着很多机会.许多平凡的人,通过制作视频,收获了掌声.赢得了粉丝,甚至改变了自己的命运. 图1:B站百大UP主颁奖现场 但这条路真的一路畅通吗?其实不然,他们成功的背后,必定有多方面 ...
- 在多个浏览器中添加IDM插件
许多朋友下载了IDM(Internet Download Manager)不知如何使用.把包含视频的链接放到软件新建任务,下载下来的的却是网页而不是视频.该软件下载视频的其中一个方法,需安装浏览器插件 ...