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

环境准备

  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. 字符串数组与字符串之间的互转(join/split)

    1.Java 1-1.字符串数组=>字符串:StringUtils: join(Object[] array, String separator) 例: Java代码 收藏代码 import o ...

  2. jquery删除表格行

    $(".mingxirmspan").click(function(){ $(this).closest("tr").remove(); })

  3. root权限下找不到 /root/.ssh目录

    Xshell配置ssh登陆远程服务器,找不到 root/.ssh目录,报错信息如下: root@ubuntu:/home/xinxin# cd /root/.ssh/bash: cd: /root/. ...

  4. 页面加载的时候自动的执行js代码

    <script> window.onload=MyAutoRun; function MyAutoRun(){ alert("函数自动执行哦!"); } </sc ...

  5. javascript字符串属性及常用方法总结

    length属性:str.length; 常用方法: 1.  str.charAt(n) 查找字符串中的第n个字符,如果不在0~str.length-1之间,则返回一个空字符串 2  .str.ind ...

  6. 【Android Developers Training】 26. 在SQL数据库中保存数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. 【Android Developers Training】 25. 保存文件

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. 使用solr6.0搭建solrCloud

    一.搭建zookeeper集群 1.下载zookeeper压缩包到自己的目录并解压(本例中的目录在/opt下),zookeeper的根目录我们在这里用${ZK_HOME}表示. 2.在${ZK_HOM ...

  9. visual studio for mac在线安装网络错误

    vs2017 for mac 终于出正式版了,兴冲冲的准备摆脱虚拟机. 官网https://www.visualstudio.com/zh-hans/vs/visual-studio-mac/下了安装 ...

  10. Vue.js 基本功能了解

    一.写在前面 隔了这么久才来出Vue的第二篇文章,真是堕落了,自己先惩罚下/(ㄒoㄒ)/~~ 回过头看自己第一篇相关文章<初试 Vue.js>(http://www.cnblogs.com ...