热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序-卡券开发(前端)

刚完成一个微信小程序卡券开发的项目。下面记录开发前,自己困惑的几个问题。因为我只负责了前端。所以下面主要是前端的工作。项目概述:按照设计图开发好首页上的优惠券列表,点击某个优惠券,输入手机号,

刚完成一个微信小程序卡券开发的项目。下面记录开发前,自己困惑的几个问题。

因为我只负责了前端。所以下面主要是前端的工作。

项目概述:按照设计图开发好首页上的优惠券列表,点击某个优惠券,输入手机号,点击领取,调用 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的含义,注意区分。 

......做项目时,想写的很多,做完了,突然词穷了。等有人问,或者我自己想,再慢慢补充吧 ==||

 

 

 

 


推荐阅读
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
author-avatar
艳斐儿M
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有