微信小程序开发之微信支付
微信支付是小程序开发中很重要的一个环节,下面会结合实战进行分析总结
环境准备
- https服务器
微信小程序只支持https请求,因此需要配置https的单向认证服务(请参考 另一篇文章https受信证书配置) - 微信公众平台账号
- 已认证的商户资料(请参考微信支付商户认证)
流程
- 小程序内调用登录接口,获取到用户的openid,api参见公共api【小程序登录API】
- 商户server调用支付统一下单,api参见公共api【统一下单API】
- 商户server调用再次签名,api参见公共api【再次签名】
- 商户server接收支付通知,api参见公共api【支付结果通知API】
- 商户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的密钥,切记
微信小程序开发之微信支付的更多相关文章
- 微信小程序开发01 --- 微信小程序项目结构介绍
一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...
- 微信小程序开发 给微信发送模板消息提示openId无效
参数我都给好了,也是post的raw方式发送请求, openId是绝对没有问题的. 但就是一直报如下错误 {"errcode":40003,"errmsg":& ...
- 微信小程序开发入门与实践
基础知识---- MINA 框架 为方便微信小程序开发,微信为小程序提供了 MINA 框架,这套框架集成了大量的原生组件以及 API.通过这套框架,我们可以方便快捷的完成相关的小程序开发工作. MIN ...
- 微信小程序开发 -- 02
微信小程序开发 --02 微信小程序在开发中,难度系数不是很大,其中应用的技术也是web开发中常用的技术,虽然在微信开发者工具中的叫法与常见的web开发的叫法不太一样. 首先,在微信小程序开发中,代码 ...
- 这是一篇满载真诚的微信小程序开发干货
1月9日零点刚过,张小龙与团队正式发布微信小程序.它究竟能在微信8.5亿用户中牵动多少人,现在还很难说.但对于创业者来讲,小程序无疑带来了新契机,以及服务“上帝”们的新方式. 从今天起,只要开发者登录 ...
- [转]微信小程序开发(二)图片上传+服务端接收
本文转自:http://blog.csdn.net/sk719887916/article/details/54312573 文/YXJ 地址:http://blog.csdn.net/sk71988 ...
- 微信小程序开发资源整理
有兴趣学习微信小程序开发的可以关注简书专题 微信小程序开发 由于微信已经开发文档和开发工具了,所以下面的内容用处不大了. 具体参考:http://mp.weixin.qq.com/wiki/ 这篇文章 ...
- 微信小程序-开发入门
微信小程序已经火了一段时间了,之前一直也在关注,就这半年的发展来看,相对原生APP大部分公司还是不愿意将主营业务放到微信平台上,以免受制于腾讯,不过就小程序的应用场景(用完即走和二维码分发等)还是很值 ...
- 微信小程序开发之模板消息
一.添加模板 登录https://mp.weixin.qq.com获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用,详见模板审核说明 页面的 <form/> 组件,属性r ...
随机推荐
- zoom与scale的异同
zoom与scale的异同点 作为一名前端,尤其是页面要兼容ie浏览器的前端,肯定对着两个属性都很熟悉. zoom和scale都是css中常用的放大和缩小一个元素的方法,在scale还没有成为css3 ...
- laydate时间插件更换皮肤
<script> ;!function(){ laydate.skin('molv'); laydate({ elem: '#demo' }) }();</script>
- 【Android Developers Training】 86. 基于连接类型修改您的下载模式
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- spring的Convert机制
spring.core包内有Converter接口,方法是T convert(S source);从一个类型转为内容一个类型的实际转化器:converters可能非常多,需要一个注册器来集中管理使用, ...
- 如何连接远程redis,并且选择某个库进行操作
public static Jedis getJedis(){ Jedis jedis = new Jedis("222.201.145.215"); jedis.select(1 ...
- 普通RAID磁盘数据格式规范
普通RAID磁盘数据格式规范 1.介绍 在当今的IT环境中,系统管理员希望改变他们正在使用的内部RAID方案,原因可能有以下几个:许多服务器都是附带RAID解决方案的,这些RAID解决方案是通过母板磁 ...
- SilverLight搭建WCF聊天室详细过程[转]
http://www.silverlightchina.net/html/zhuantixilie/getstart/2011/0424/7148.html 默认节点 SilverLight搭建WCF ...
- hack在微信等webview中无法修改document.title的情况
var $body = $('body'); document.title = '确认车牌'; // hack在微信等webview中无法修改document.title的情况 var $iframe ...
- 如何在一个Eclipse同时启动两个Tomcat
比如:有两个版本的tomcat,一个5.*,一个6.*,此时由于两个工程分别部署在两个版本的tomcat下,需要同时启动两个tomcat,以下是方法: 1.特别要注意: 不要设置CATALINA_HO ...
- spring boot 事件发布与接收
1.创建发布对象 LoginEvent 2.在要发布对象的地方注入 ApplicationEventPublisher @Autowired ApplicationEventPublisher pub ...