微信支付是小程序开发中很重要的一个环节,下面会结合实战进行分析总结

环境准备

  1. https服务器

    微信小程序只支持https请求,因此需要配置https的单向认证服务(请参考 另一篇文章https受信证书配置)
  2. 微信公众平台账号
  3. 已认证的商户资料(请参考微信支付商户认证)

流程

  1. 小程序内调用登录接口,获取到用户的openid,api参见公共api【小程序登录API】
  2. 商户server调用支付统一下单,api参见公共api【统一下单API】
  3. 商户server调用再次签名,api参见公共api【再次签名】
  4. 商户server接收支付通知,api参见公共api【支付结果通知API】
  5. 商户server查询支付结果,api参见公共api【查询订单API】

支付

payment:function(event){
var that = this;
wx.login({
success: function(res) {
if (res.code) {
//发起网络请求
wx.request({
url: app.data.basepath+"/api/payment/openid",//发送后台,获取openid
data: {code:res.code},
method: 'GET',
success: function (res) {
that.unifiedorder(res.data);
},
})
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
});
},
unifiedorder:function(openid){//调用微信统一下单,并进行二次加密
var that = this;
wx.request({
url:app.data.basepath+"/api/payment/unifiedorder",
data:{openid:openid},
metthod:'get',
success:function(res){
that.payreq(res);
}
});
},
payreq:function(res){
var that = this;
wx.requestPayment({
timeStamp: res.data.timeStamp,
nonceStr: res.data.nonceStr,
package: res.data.package,
signType: res.data.signType,
paySign: res.data.paySign,
success:function(r){
wx.showToast({
title: '支付成功',
icon: 'success',
duration: 2000
})
}
})
}

公共方法

private static String post(String url,String param){
//使用jodd的HttpRequest接口
jodd.http.HttpRequest request = HttpRequest.post(url).body(params);
String reponse = new String(request.send().bodyText().getBytes(CharEncoding.ISO_8859_1), CharEncoding.UTF_8);
return reponse;
}

获取openid逻辑

//获取openid
public String getOpenId(String code){
String param = initOpenIdParam(code);
String openIdUrl = PaymentConstants.OPEN_ID_URL;
String response = HTTPUtils.post(openIdUrl,param);
Map result = JSON.parseObject(response);
return result.get("openid").toString();
}
private String initOpenIdParam(String code){
Map<String,String> map = new HashMap<>();
map.put("appid","小程序appid");
map.put("secret","小程序密钥");
map.put("js_code",code);
map.put("grant_typ","authorization_code");
return HTTPUtils.parseParam(map);//将map转换为"key1=val1&key2=val2"的格式
}

签名错误

有个大坑

拼接密钥那一步用的key是微信支付的key,不是小程序app的密钥,切记

微信小程序开发之微信支付的更多相关文章

  1. 微信小程序开发01 --- 微信小程序项目结构介绍

    一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...

  2. 微信小程序开发 给微信发送模板消息提示openId无效

    参数我都给好了,也是post的raw方式发送请求, openId是绝对没有问题的. 但就是一直报如下错误 {"errcode":40003,"errmsg":& ...

  3. 微信小程序开发入门与实践

    基础知识---- MINA 框架 为方便微信小程序开发,微信为小程序提供了 MINA 框架,这套框架集成了大量的原生组件以及 API.通过这套框架,我们可以方便快捷的完成相关的小程序开发工作. MIN ...

  4. 微信小程序开发 -- 02

    微信小程序开发 --02 微信小程序在开发中,难度系数不是很大,其中应用的技术也是web开发中常用的技术,虽然在微信开发者工具中的叫法与常见的web开发的叫法不太一样. 首先,在微信小程序开发中,代码 ...

  5. 这是一篇满载真诚的微信小程序开发干货

    1月9日零点刚过,张小龙与团队正式发布微信小程序.它究竟能在微信8.5亿用户中牵动多少人,现在还很难说.但对于创业者来讲,小程序无疑带来了新契机,以及服务“上帝”们的新方式. 从今天起,只要开发者登录 ...

  6. [转]微信小程序开发(二)图片上传+服务端接收

    本文转自:http://blog.csdn.net/sk719887916/article/details/54312573 文/YXJ 地址:http://blog.csdn.net/sk71988 ...

  7. 微信小程序开发资源整理

    有兴趣学习微信小程序开发的可以关注简书专题 微信小程序开发 由于微信已经开发文档和开发工具了,所以下面的内容用处不大了. 具体参考:http://mp.weixin.qq.com/wiki/ 这篇文章 ...

  8. 微信小程序-开发入门

    微信小程序已经火了一段时间了,之前一直也在关注,就这半年的发展来看,相对原生APP大部分公司还是不愿意将主营业务放到微信平台上,以免受制于腾讯,不过就小程序的应用场景(用完即走和二维码分发等)还是很值 ...

  9. 微信小程序开发之模板消息

    一.添加模板 登录https://mp.weixin.qq.com获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用,详见模板审核说明 页面的 <form/> 组件,属性r ...

随机推荐

  1. Kafka官方文档翻译——实现

    IMPLEMENTATION 1. API Design Producer APIs Producer API封装了底层两个Producer: kafka.producer.SyncProducer ...

  2. JAVA基础——类和对象

    java类与对象学习笔记 一.成员变量和局部变量 (1)定义 1.成员变量 在类中定义,用来描述对象将要有什么.(默认的成员变量值为0) 2.局部变量 在类的方法中定义,在方法中临时保存数据. 演示示 ...

  3. 7.java的请求转发和请求重定向

    1.请求重定向:是客户端的行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变,一次新的转发. 2.请求转发:是服务器的行 ...

  4. 如何将txt的多行记录直接导入到mysql数据库

    1.使用工具是navicat for mysql 2.要导入的txt格式要求,第一行为栏位,及个属性名 第二行开始为数据行 如下所示,例如要插入多行账号密码

  5. git的使用[转]

    本节内容 github介绍 安装 仓库创建& 提交代码 代码回滚 工作区和暂存区 撤销修改 删除操作 远程仓库 分支管理 多人协作 github使用 忽略特殊文件.gitignore 为什么要 ...

  6. 前端自动化测试python+webdriver

    前言:很多做测试的朋友的就知道,python+webdriver  可以做自动化测试,这对前端开发是非常有用的.  python 入门我就不讲了  ,推荐学习 廖雪峰老师的python入门3.5新版哈 ...

  7. IOS开发基础环境搭建

    一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包:       ...

  8. 基于Metronic的Bootstrap开发框架经验总结(15)-- 更新使用Metronic 4.75版本

    在基于Metronic的Bootstrap开发框架中,一直都希望整合较新.较好的前端技术,结合MVC的后端技术进行项目的开发,随着时间的推移,目前Metronic也更新到了4.75版本,因此着手对这个 ...

  9. Spring框架下的定时任务quartz框架的使用

    手头的这个项目需要用到定时任务,但之前没接触过这东西,所以不太会用,从网上找资料,大致了解了一下,其实也不难.Java的定时任务实现有三种,一种是使用JDK自带的Timer那个类来实现,另一种是使用q ...

  10. iOS多线程开发之GCD(中篇)

    前文回顾: 上篇博客讲到GCD的实现是由队列和任务两部分组成,其中获取队列的方式有两种,第一种是通过GCD的API的dispatch_queue_create函数生成Dispatch Queue:第二 ...