在微信小程序授权登录上广东省高考成绩查询的时候登录时出现大片白色英文和❌,谢谢

跨越高山,飞跃重洋,我们行走在技术之路上。欢迎投稿:
微信小程序开发遇到的那些坑——CSDN 知识库的初步尝试
【编者按】从内测到开启公测,微信小程序已然成为了 IT 领域最为火热的话题,除却不同类型应用的可能性探索之外,对于开发团队而言,最多的当属踩过的那些坑。近一段时间,CSDN 也在为项目进行小程序开发的初步尝试,对此,CSDN 高级研发工程师尚琳凯在一次线下活动中分享了知识库小程序开发的一些经验,本文为扼要总结。微信小程序的世界还都充满着未知数,欢迎邮件交流分享。小程序为开发者提供了什么什么是小程序小程序是微信推出的一种新的公众号的形态,不需要下载安装,即可在微信中使用的应用。同时,需要注意的是,小程序、订阅号、服务号、企业号是并行的体系。以下为 CSDN 知识库推出的“”知识图谱,能够更好地帮助读者了解微信小程序在微信开发中的位置。微信小程序 MINA 框架小程序提供了一个框架,微信称之为“MINA”,这个框架主要分两个层面,视图层和逻辑层。框架的核心是一个响应的数据绑定系统。WXML 中的动态数据均来自对应 Page 的 data,这个数据绑定是单向的,只有数据发生变化,视图才会做出相应的调整。这种模式,让开发者专注于事件处理上,改变对象状态,实现视图更新。 为了方便以及限制开发者开发,微信自己定义了一系列的基础组件,就是视图层的组成单元(表单组件、媒体组件、导航等),组件自带一些功能与微信风格的样式,类似 HTML 标签。微信还提供了很多的原生API,用来调用微信内部提供的功能,以及一个微信小程序开发者工具。微信小程序源码结构:视图层(将逻辑层的数据展现在视图上)
逻辑层(通过改变数据[setData方法]来改变视图)
在小程序中,微信规定了界面的组成模式,由四个文件组成:.wxml 文件(页面结构文件)标签语言,类似 HTML,真正负责页面结构的文件,可以绑定数据;
.wxss 文件(样式表文件)类似 CSS,大部分 CSS 样式都相同;
.js 文件(脚本文件)用来运行我们的逻辑,使用 JS 语言;
.json 文件(配置文件)主要配置公用的样式,比如 Tab 栏、窗口样式等。
知识库小程序开发知识库小程序开发的初步尝试关注重点是 JS 文件和 WXML 文件。由于知识库把开发领域细分成某个领域,例如技术语言、运维系统、行业应用等方面,对每个技术和知识点都设计一个网状图谱,来总结技术某一方面涉及到的知识,同时为知识结构准备一些精品的内容,方便大家更系统的学习知识。所以在知识库这个产品上,需要实现内容推荐、个人中心以及搜索。用户侧和内容推荐都包括四层:库-》知识结构-》内容列表-》内容详情页。搜索功能可以根据搜索的关键词查找到用户侧或推荐知识库的相关内容,方便大家阅读或收藏。知识库页面设计小程序组件满足了所有的显示功能和结构(列表、窗口、按钮、事件等),API 齐全,便于逻辑开发。不同的功能模块放在不同的页面里,具体表现为:视图层: Tab 栏,列表页,知识结构页,内容详情页,搜索页
Tab 栏-&通过绑定数据index选择一级页面;
列表页-&通过改变绑定数据contentlist数组,控制列表显示和动态加载;
搜索页-&通过绑定数据searchValue,通过事件及时获取用户输入。
小程序开发路上踩过的坑1. 打开页面数量限制(redirectTo还是navigateTo)微信提供 Tab 栏的设置,可以在app.json中配置,在 App 里配置的 Tab 栏将出现在所有的一级页面。但是它有一个问题就是第一次点击 Tab 将会打开一个新的页面,微信对打开页面的数量限制是五个。微信提供了几个页面跳转的方式,redirectto、navigateto,还有返回。重点说这两个,redirectto会直接在原页面上打开新页面,navigateto会新开启一个页面。由于微信在页面数量上有限制,我们产品的层级有比较多,导致无法直接在app.json设置 Tab 栏。所以我们把 Tab 栏单独设计出来。点击 Tab 不开启新页面。在每个初级页面都引用进去,之后二级三级的页面上不使用 Tab 切换,而是需要返回到初级页面。2. 树状结构的展示每一个库都有一个树状的知识结构,大家请看这个例子。每个层级展示的方式是一样的,所以正常情况下,我们都会选用递归的方式来使展示。比如在这张图里,当我们判断这个节点拥有子节点,就想再次调用同样方法显示。但是很遗憾,小程序里,不论是使用模板,还是使用include的方式引用文件,都没有办法做到自己调自己。幸运的是我们知道层级最深有多少,这样就可以写几个同样的文件和模板,加上不同的命名来调用。如果是未知层级的树状结构,就会非常难以处理。在这里可以建议大家将树状结构变成数组的形式,加上层级标识,在 WXML 文件中可以使用循环的方式来处理层级的显示。 3. HTML 页面在微信小程序中展示这是一个非常难处理的问题,微信不支持 HTML 页面的展示,所以需要把所有 HTML 的标签转化成小程序内允许的标签。我们使用了一个名叫wxParse的应用,它的功能就是通过正则表达式将 HTML 页面转化成 JSON 形式,再用模板的方式展现出来。在这里面规定了各个标签的样式(WXSS)。遗憾的是它也有层级方面的问题,同样是重复写了很多完全一样的模板。HTML 转 JSON 工具转化后的 HTML 页面顺序调用
如果 HTML 的标签层级结构超出了模板个数,那么超出部分将无法显示出来。这个应用是在微信中运行的,建议大家把数据转化放在服务器端来进行,将转换后的数据发给小程序。另外小程序setData()一次不能超过1024K,如果你的 JSON 格式数据超过这个限制,就会很难再拼接。4. 冒泡事件一个组件上的事件被触发后,该事件会向父节点传递,由此引起不必要的逻辑处理,对此,使用费冒泡事件处理。5. 网络请求接口wx.request()没有携带 Cookies如果服务器端有通过获取 Cookies 处理的逻辑没办法和小程序结合,只能为小程序单独开发新的接口。微信发起网络请求 API总结小程序在运营上的优势在于微信用户量大,适合推广,某些功能单一的 App 可以在小程序中实现,不用再下载 App。开发者不用考虑平台,开发成本低。但同时不适合开发逻辑复杂界面丰富的程序,受到框架限制,随意性小,无法满足所有功能。了解最新移动开发相关信息和技术,请关注 mobilehub 公众微信号(ID: mobilehub)。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!2018年高考报名今天开始可通过微信小程序上传照片--社会新闻-东方网
&&&新闻热线:021-
2018年高考报名今天开始可通过微信小程序上传照片
&nbsp&nbsp&nbsp&nbsp人工智能朗读:11月30日,广东省教育考试院就2018年高考报名相关热点问题进行了回答。报名时间安排在-10日,考生预报名时间为:12月1-6日,确认报名时间为:12月6-10日,报名网址:http://www.ecogd.edu.cn/pgks;广州市考生预报名和确认报名的时间,由广州市招生办公室在上述时间内自行确定。&nbsp&nbsp&nbsp&nbsp11月30日,广东省教育考试院就2018年高考报名相关热点问题进行了回答。报名时间安排在-10日,考生预报名时间为:12月1-6日,确认报名时间为:12月6-10日,报名网址:http://www.ecogd.edu.cn/pgks;广州市考生预报名和确认报名的时间,由广州市招生办公室在上述时间内自行确定。&nbsp&nbsp&nbsp&nbsp微信小程序可上传照片&nbsp&nbsp&nbsp&nbsp据了解,广东省普通高考采取互联网报名方式报名。报名时,各报名点将先用考生二代或三代身份证采集考生基本信息(包括姓名、性别、民族、出生日期和身份证号码),考生完成预报名后,使用手机登录广东省教育考试院官微(微信号:gdsksy),使用考试院官微上的微信小程序自行拍照采集本人人脸特征信息数并上传。然后考生本人需在规定时间内,到考生本人户口所在地的市、县(区)招生办指定的报名点确认报名资格、校对和核准报考信息、采集指纹。&nbsp&nbsp&nbsp&nbsp随迁考生父母须有三个“三”&nbsp&nbsp&nbsp&nbsp随着“异地高考”政策的稳定,广东今年继续为外省户籍的进城务工人员随迁子女提供高考服务,考试院强调,认定工作须满足三个“三”和两个稳定的基本条件。&nbsp&nbsp&nbsp&nbsp具体包括,其父亲或母亲连续三年持有广东省居住证,按国家规定在广东省参加社会保险累计三年以上,随迁子女在广东省参加中考并具有高中阶段三年完整学籍,且其父亲或母亲具有合法稳定职业和合法稳定住所。&nbsp&nbsp&nbsp&nbsp“三年”的年限计算截止时间统一为日。其父亲或母亲在日前已办理居住证,且持有的居住证截止至日属于有效状态的予以认定。合法稳定住所还包括农村自建房、单位宿舍及租赁房屋,须提供有效证明材料。&nbsp&nbsp&nbsp&nbsp另外,随迁子女在我省参加中考,但高中阶段3年完整学籍所在地与父亲或母亲工作所在地为广东省内不同地市的予以认定。&nbsp&nbsp&nbsp&nbsp建议艺考生参加省统考&nbsp&nbsp&nbsp&nbsp据了解,广东省普通高校艺术类(含美术类、音乐类,下同)专业招生术科考试分为省统考、院校校考、省统考基础上的院校校考三种形式。&nbsp&nbsp&nbsp&nbsp考试院提醒,艺术类考生报名时,需认真了解艺术类专业招生考试的相关政策,并向拟报考的高校咨询后,再确认艺术术科考试类型。只参加省统考的必须填报统考信息选项;只参加院校校考的,可只填报校考信息选项;既要参加省统考又要参加院校校考或我省统考基础上的校考的,则应同时填报统考和校考信息选项。&nbsp&nbsp&nbsp&nbsp为增加报考志愿及被录取机会,考试院建议报考艺术类专业的考生原则上须参加省组织的艺术类专业术科统一考试,即报名时在填报院校校考的同时,一般还应选择美术术科统考或音乐术科统考。报名时没有选择相应的信息选项而参加了院校组织的校考的考生,将无法被有关的艺术类院校(专业)录取。&nbsp&nbsp&nbsp&nbsp2018年普通高考音乐术科统考的考试时间是日-19日,美术术科统考的考试时间是日。
东方网(eastday.com)版权所有,未经授权禁止复制或建立镜像
2018年高考报名今天开始可通过微信小程序上传照片
日 14:48 来源:金羊网新闻中心
&nbsp&nbsp&nbsp&nbsp人工智能朗读:11月30日,广东省教育考试院就2018年高考报名相关热点问题进行了回答。报名时间安排在-10日,考生预报名时间为:12月1-6日,确认报名时间为:12月6-10日,报名网址:http://www.ecogd.edu.cn/pgks;广州市考生预报名和确认报名的时间,由广州市招生办公室在上述时间内自行确定。&nbsp&nbsp&nbsp&nbsp11月30日,广东省教育考试院就2018年高考报名相关热点问题进行了回答。报名时间安排在-10日,考生预报名时间为:12月1-6日,确认报名时间为:12月6-10日,报名网址:http://www.ecogd.edu.cn/pgks;广州市考生预报名和确认报名的时间,由广州市招生办公室在上述时间内自行确定。&nbsp&nbsp&nbsp&nbsp微信小程序可上传照片&nbsp&nbsp&nbsp&nbsp据了解,广东省普通高考采取互联网报名方式报名。报名时,各报名点将先用考生二代或三代身份证采集考生基本信息(包括姓名、性别、民族、出生日期和身份证号码),考生完成预报名后,使用手机登录广东省教育考试院官微(微信号:gdsksy),使用考试院官微上的微信小程序自行拍照采集本人人脸特征信息数并上传。然后考生本人需在规定时间内,到考生本人户口所在地的市、县(区)招生办指定的报名点确认报名资格、校对和核准报考信息、采集指纹。&nbsp&nbsp&nbsp&nbsp随迁考生父母须有三个“三”&nbsp&nbsp&nbsp&nbsp随着“异地高考”政策的稳定,广东今年继续为外省户籍的进城务工人员随迁子女提供高考服务,考试院强调,认定工作须满足三个“三”和两个稳定的基本条件。&nbsp&nbsp&nbsp&nbsp具体包括,其父亲或母亲连续三年持有广东省居住证,按国家规定在广东省参加社会保险累计三年以上,随迁子女在广东省参加中考并具有高中阶段三年完整学籍,且其父亲或母亲具有合法稳定职业和合法稳定住所。&nbsp&nbsp&nbsp&nbsp“三年”的年限计算截止时间统一为日。其父亲或母亲在日前已办理居住证,且持有的居住证截止至日属于有效状态的予以认定。合法稳定住所还包括农村自建房、单位宿舍及租赁房屋,须提供有效证明材料。&nbsp&nbsp&nbsp&nbsp另外,随迁子女在我省参加中考,但高中阶段3年完整学籍所在地与父亲或母亲工作所在地为广东省内不同地市的予以认定。&nbsp&nbsp&nbsp&nbsp建议艺考生参加省统考&nbsp&nbsp&nbsp&nbsp据了解,广东省普通高校艺术类(含美术类、音乐类,下同)专业招生术科考试分为省统考、院校校考、省统考基础上的院校校考三种形式。&nbsp&nbsp&nbsp&nbsp考试院提醒,艺术类考生报名时,需认真了解艺术类专业招生考试的相关政策,并向拟报考的高校咨询后,再确认艺术术科考试类型。只参加省统考的必须填报统考信息选项;只参加院校校考的,可只填报校考信息选项;既要参加省统考又要参加院校校考或我省统考基础上的校考的,则应同时填报统考和校考信息选项。&nbsp&nbsp&nbsp&nbsp为增加报考志愿及被录取机会,考试院建议报考艺术类专业的考生原则上须参加省组织的艺术类专业术科统一考试,即报名时在填报院校校考的同时,一般还应选择美术术科统考或音乐术科统考。报名时没有选择相应的信息选项而参加了院校组织的校考的考生,将无法被有关的艺术类院校(专业)录取。&nbsp&nbsp&nbsp&nbsp2018年普通高考音乐术科统考的考试时间是日-19日,美术术科统考的考试时间是日。“广东省教育考试院”微信小程序为2018年高考生全程导航_Hi小程序
“广东省教育考试院”微信小程序为2018年高考生全程导航
|HiShop|阅读量:
导读:广东省教育考试院近期上线微信高考信息服务,可以通过“广东省教育考试院”小程序及时查询座位信息以及高考成绩,及时跟踪相关动态。...
Hi小程序小编了解到,微信小程序成为当下热门话题,下面从多个方面来谈谈“广东省教育考试院”微信小程序为2018年高考生全程导航。
广东省教育考试院近期上线微信高考信息服务,可以通过&广东省教育考试院&小程序及时查询座位信息以及高考成绩,及时跟踪相关动态。
按照《教育部办公厅关于坚持正确导向规范高考成绩发布和相关宣传工作的通知》(教学厅函〔2017〕36号)中&改革高考成绩发布方式&的要求,根据《广东省教育厅、广东省招生委员会关于2018年深入推进普通高等学校考试招生改革的通知》精神,为紧跟时代建设发展步伐,充分发挥现代信息技术手段优势,努力提升考试招生信息化水平,最大程度地服务和方便考生,我院将于近期部署上线高考信息预约推送和查询功能,依托广东省教育考试院微信公众号(微信号:gdsksy)小程序为全省考生提供优质便捷的高考信息服务。
高考信息服务涵盖高考座位信息预约推送、高考座位查询、高考成绩信息预约推送、高考成绩查询等功能。高考座位信息查询预约推送时间自日开始,高考座位查询时间自日开始,高考成绩查询预约推送时间自日开始,高考成绩查询时间另文通知。后续将陆续推出高考录取信息查询和高考成绩单打印功能,届时将通过省教育考试院微信公众号推文通知,请广大考生密切关注公众号,及时跟踪相关动态。
  扇贝小字典小程序是扇贝小字典官方的小程序,;精选英文例句真人发音;启发
下一篇:没有了
猜你喜欢的内容
移动云商城
一款会赚钱的网上商城系统——移动云商城,让零售企业转型电商更简单!独创6合一全网营销模式、裂变式推广分佣快速吸粉引流,不论微信、APP、手机触屏还是PC端网上购物商城,只要1个后台即可掌控全网最火爆的6大商城!
热门小程序
读过此文的人还读过
官方微信>>>公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理。
支付,对于购物来说,可以说是占据了十分重要的一块,毕竟能收到钱才是重点。
当然在开发之前,我们需要有下面这些东西:
密钥(小程序配置界面)
api密钥(商家后台自己设置)
当然这些是不用我们自己申请的,公司会有人申请好,然后要什么跟这个人说,让他提供就可以了。
首先来看一下官方给出的业务流程时序图
这个图很清晰的表达了在小程序支付中的整个流程,每一步要做些什么。
一个完整的支付,一般情况下都是包含了下面三个主要的点;
支付(正常是支付平台提供的h5页面让用户操作,主要是输密码)
通知(用户完成一笔支付了,支付平台要通知商家支付结果,商家收到结果后进行一些相应的处理)
查询(与第二点有点反过来的意思,商家自己主动去支付平台查询支付的结果,然后根据结果做相应的处理)
下面就重点来简单实现一下上面说的第一点,支付,也是可以进行下面两步的在大前提。
支付的简单实现
小程序的实现
简单起见,在index.wxml中添加一个输入框和一个button,绑定一下相应的事件,输入框主要是用于输入订单号,按钮用于模拟提交一个订单并发起支付。
&!--index.wxml--&
&view class=&container&&
&input type=&text& bindinput=&getOrderCode& style=&border:1px solid #&
&button bindtap=&pay&&立即支付&/button&
然后在index.js中写上一小段代码,主要是处理上面按钮的点击事件。
txtOrderCode: ''
pay: function () {
var ordercode = this.data.txtOrderC
wx.login({
success: function (res) {
if (res.code) {
wx.request({
url: 'https://www.yourdomain.com/pay',
code: res.code,//要去换取openid的登录凭证
ordercode: ordercode
method: 'GET',
success: function (res) {
console.log(res.data)
wx.requestPayment({
timeStamp: res.data.timeStamp,
nonceStr: res.data.nonceStr,
package: res.data.package,
signType: 'MD5',
paySign: res.data.paySign,
success: function (res) {
// success
console.log(res);
fail: function (res) {
console.log(res);
complete: function (res) {
// complete
console.log(res);
console.log('获取用户登录态失败!' + res.errMsg)
getOrderCode: function (event) {
this.setData({
txtOrderCode: event.detail.value
可以看到,在这里Catcher先通过wx.login这个API先取到了登录的凭证code,并把这个凭证code做为请求参数用wx.request这个API发起一个网络请求。
在这个网络请求处理后会返回小程序支付所需要的相关参数。拿到这些参数后,再调用wx.requestPayment这个支付API,此时才算是真正的发起支付。
至此,小程序这边的事已经做完了,接下来就是要去处理接口那边的事了,其实接口要做的就是返回小程序需要的几个参数。但是要拿到这几个参数还是需要做不少事情的。
接口的实现
据悉最新版的Senparc.Weixin.MP已经支付了小程序相关的内容,但是公司用的版本还是比较低
并且近期也没有打算对这个组件进行升级。所以就从白纸一张开始了。
用的是mvc,所以这个小程序发起的网络请求会由下面的action的执行,里面的实现,每一步做了什么应该也已经很清晰了。
public ActionResult Pay(string code, string ordercode)
var paramter = new Parameters();
paramter.out_trade_no =
//使用登录凭证 code 获取 session_key 和 openid
var unifiedorderRes = GetOpenIdAndSessionKey(paramter.appid, paramter.secret, code);
//反序列化session_key 和 openid成ChangeResponseEntity实体
var tmp = JsonConvert.DeserializeObject&ChangeResponseEntity&(unifiedorderRes);
//统一下单的url和参数
var payUrl = &https://api.mch.weixin.qq.com/pay/unifiedorder&;
var param = GetUnifiedOrderParam(tmp.openid, paramter);
//统一下单后拿到的xml结果
var payResXML = Helper.DoPost(param, payUrl);
var payRes = XDocument.Parse(payResXML);
var root = payRes.Element(&xml&);
//序列化相应参数返回给小程序
var res = GetPayRequestParam(root, paramter.appid, paramter.key);
return Json(res, JsonRequestBehavior.AllowGet);
由于只是一个演示的过程,不想这些数据经常以字符串的形式频繁出现在代码中,所以把相关的参数全部都放到了一个名为Parameters的类中(放到配置文件中也是可以的),除了订单号是从小程序传过来的,当然在实际中这是不合理的,毕竟像金额这些东西,不可能每次都是同一个!这点是要注意的。
下面先来看看这个Parameters类的定义:
public class Parameters
public string appid { get { return &申请的appid&; } }
public string mchid { get { return &申请的商户号&; } }
public string nonce { get { return Helper.GetNoncestr(); } }
public string notify_url { get { return &http://yourdomain.com/notifyurl&; } }
public string body { get { return &testpay&; } }
public string out_trade_no { }
public string spbill_create_ip { get { return &IP地址&; } }
public string total_fee { get { return &1&; } }
public string trade_type { get { return &JSAPI&; } }
public string key { get { return &在商家后台设置的密钥&; } }
public string secret { get { return &在配置小程序时的密钥&; } }
首先是获取到登录凭证后发起的这个网络请求。这个网络请求是决定了这次支付能否成功的第一步!
下面要做的是用登录凭证去换我们要的openid。
/// &summary&
/// 取openid和session_key
/// &/summary&
/// &param name=&appid&&&/param&
/// &param name=&secret&&&/param&
/// &param name=&js_code&&&/param&
/// &returns&&/returns&
private string GetOpenIdAndSessionKey(string appid, string secret, string js_code)
var url = string.Format(&https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code&
, appid,secret,js_code);
var request = WebRequest.Create(url) as HttpWebR
var response = request.GetResponse();
var respStream = response.GetResponseStream();
var res = string.E
using (var reader = new StreamReader(respStream, Encoding.UTF8))
res = reader.ReadToEnd();
要换取openid,就要向微信提供的地址发起一个网络请求,并在URL带上appid,secret和凭证code这三个参数。
然后就可以拿到一个下面形式的json字符串
&openid&: &OPENID&,
&session_key&: &SESSIONKEY&
拿到之后自然就是要对这个字符串进行json的反序列化,这里用到了json.net这个包。
根据时序图,下面要调用统一下单这个接口了。
上面的代码,在统一下单这一块,又分为下面几个步骤
处理统一下单的参数(签名和组装xml)
发起POST请求
解析请求得到的结果
参数的处理:
具体规则参见:
/// &summary&
/// 取统一下单的请求参数
/// &/summary&
/// &param name=&openid&&&/param&
/// &param name=&param&&&/param&
/// &returns&&/returns&
private string GetUnifiedOrderParam(string openid, Parameters param)
//参与统一下单签名的参数,除最后的key外,已经按参数名ASCII码从小到大排序
var unifiedorderSignParam = string.Format(&appid={0}&body={1}&mch_id={2}&nonce_str={3}&notify_url={4}&openid={5}&out_trade_no={6}&spbill_create_ip={7}&total_fee={8}&trade_type={9}&key={10}&
, param.appid, param.body, param.mchid, param.nonce, param.notify_url
, openid, param.out_trade_no, param.spbill_create_ip, param.total_fee, param.trade_type, param.key);
var unifiedorderSign = Helper.GetMD5(unifiedorderSignParam).ToUpper();
//构造统一下单的请求参数
return string.Format(@&&xml&
&appid&{0}&/appid&
&body&{1}&/body&
&mch_id&{2}&/mch_id&
&nonce_str&{3}&/nonce_str&
&notify_url&{4}&/notify_url&
&openid&{5}&/openid&
&out_trade_no&{6}&/out_trade_no&
&spbill_create_ip&{7}&/spbill_create_ip&
&total_fee&{8}&/total_fee&
&trade_type&{9}&/trade_type&
&sign&{10}&/sign&
&, param.appid, param.body, param.mchid, param.nonce, param.notify_url, openid
, param.out_trade_no, param.spbill_create_ip, param.total_fee, param.trade_type, unifiedorderSign);
这里要注意一点,由于我们的传的trade_type是JSAPI,所以这里必须是要加上openid进行处理的。
然后就是解析统一下单返回的XML了,说是解析,其实也就是要拿到我们需要的数据罢了。这里最后会得到一个小程序支付API需要的参数实体。
/// &summary&
/// 获取返回给小程序的支付参数
/// &/summary&
/// &param name=&root&&&/param&
/// &param name=&appid&&&/param&
/// &param name=&key&&&/param&
/// &returns&&/returns&
private PayRequesEntity GetPayRequestParam(XElement root,string appid,string key)
//当return_code 和result_code都为SUCCESS时才有我们要的prepay_id
if (root.Element(&return_code&).Value == &SUCCESS& && root.Element(&result_code&).Value == &SUCCESS&)
var package = &prepay_id=& + root.Element(&prepay_id&).V
var nonceStr = Helper.GetNoncestr();
var signType = &MD5&;
var timeStamp = Convert.ToInt64((DateTime.Now - new DateTime()).TotalSeconds).ToString();
var paySignParam = string.Format(&appId={0}&nonceStr={1}&package={2}&signType={3}&timeStamp={4}&key={5}&,
appid, nonceStr, package, signType, timeStamp, key);
var paySign = Helper.GetMD5(paySignParam).ToUpper();
var payEntity = new PayRequesEntity
package = package,
nonceStr = nonceStr,
paySign = paySign,
signType = signType,
timeStamp = timeStamp
return payE
return new PayRequesEntity();
支付参数实体对应的内容如下:
/// &summary&
/// 小程序支付需要的参数
/// &/summary&
public class PayRequesEntity
/// &summary&
/// 时间戳从日00:00:00至今的秒数,即当前的时间
/// &/summary&
public string timeStamp { }
/// &summary&
/// 随机字符串,长度为32个字符以下。
/// &/summary&
public string nonceStr { }
/// &summary&
/// 统一下单接口返回的 prepay_id 参数值
/// &/summary&
public string package { }
/// &summary&
/// 签名算法
/// &/summary&
public string signType { }
/// &summary&
/// &/summary&
public string paySign { }
需要注意的是,这里的签名操作,一定是要配合appId,这也是Catcher在支付这一块踩的唯一的一个坑,所以提醒一下各位读者,希望能避开这个坑。
还有最后一步就是要返回一个序列化的对象给小程序,以供小程序使用。
到这里,后台接口也已经OK了,现在就用真机扫描二维码,点击立即支付按钮,此时就会弹出要你输入密码的框框,输入你的微信支付密码,如下所示:
然后就会提示支付成功,如下所示:
几秒钟之后就会收到微信支付发来的消息,通知你在什么时候支出了多少钱。
通知的简单说明
前面也提到了,通知是用户支付成功后,微信的服务器会向我们统一下单指定的notify_url发起一个异步的回调。
下面用伪代码来表示这一过程
public ActionResult Notify()
//1.获取微信通知的参数
//2.更新订单的相关状态
//3.返回一个xml格式的结果给微信服务器
var res = @&&xml&
&return_code&&![CDATA[SUCCESS]]&&/return_code&
&return_msg&&![CDATA[OK]]&&/return_msg&
return Content(res);
这里需要注意的是要处理好微信重复通知的情况!
查询的简单说明
通知和查询本质上都是想知道订单是否支付成功了。
它们的区别是:通知是微信主动通知商家; 查询是商家主动向微信发起查询;
这两个动作的主体是不一样的。
当微信能正常发起推送并且商家接收这个推送的服务器又没有挂的时候,查询的作用是微乎其微的。
当然,不可避免的会出现,微信不能正常发起推送或者商家的服务器挂了,这个时候查询的作用就变得很重要了!!
这个时候我们就要建交起一个定时作业来专门处理这种情况了,可以选择Quartz.Net,Hangfire等!
这个作业的内容具体如下:
public void QueryJob()
//1.找到要查询的订单号
//2.根据订单号和appId等内容向https://api.mch.weixin.qq.com/pay/orderquery这个地址发起网络请求
//3.拿到微信返回的结果
//4.根据结果进行相应的处理
至于多久执行一次这个作业,可能就要根据使用小程序进行购物的数量多不多来做一个大致的估计。
小程序的支付还是算是比较简单,毕竟文档还算齐全,基本照着文档的提示就能把这个支付做好。
阅读(...) 评论()}

我要回帖

更多关于 微信小程序登录界面 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信