微信公众号页面支付接口java,[Java教程]微信公众号支付(三):页面调用微信支付JS并完成支付...
[Java教程]微信公众号支付(三):页面调用微信支付JS并完成支付
0 2015-09-15 15:00:30
一、调用微信的JS文件
1.首先要绑定【JS接口安全域名】,“公众号设置”的“功能设置”中
2.引入JS文件
备注:支持使用 AMD/CMD 标准模块加载方法加载1
3.通过config接口注入权限验证配置1 wx.config({2 debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。3 appId: '', // 必填,公众号的唯一标识4 timestamp: , // 必填,生成签名的时间戳5 nonceStr: '', // 必填,生成签名的随机串6 signature: '',// 必填,签名,见附录17 jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,这里只写支付的8 });
4.通过ready接口处理成功验证1 wx.ready(function(){2 wx.hideOptionMenu();//隐藏右边的一些菜单3 });
二、wx.config中的签名
1.首先要获取到access token:公众号的全局唯一票据 。然后根据access token获取到jsapi_ticket:公众号用于调用微信JS接口的临时票据。再用jsapi_ticket获取到签名。
2.获取access token:文档:url:http://mp.weixin.qq.com/wiki/15/54ce45d8d30b6bf6758f68d2e95bc627.html1 public static Token getToken(String appid, String appsecret) { 2 Token token = null; 3 String requestUrl = Constants.token_url.replace("APPID", appid).replace("APPSECRET", appsecret); 4 // 发起GET请求获取凭证 5 JSONObject jsonObject = CommonUtil.httpsRequestToJsonObject(requestUrl, "GET", null); 6 7 if (null != jsonObject) { 8 try { 9 token = new Token();10 token.setAccessToken(jsonObject.getString("access_token"));11 token.setExpiresIn(jsonObject.getInt("expires_in"));12 } catch (JSONException e) {13 token = null;14 // 获取token失败15 log.error("获取token失败 "+jsonObject.getInt("errcode")+","+jsonObject.getString("errmsg"));16 }17 }18 return token;19 }
有些方法在前两篇中。
3.获取jsapi_ticket1 public static Ticket getTicket() { 2 //Constants.ticket_url = https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi 3 String requestUrl = Constants.ticket_url.replace("ACCESS_TOKEN", TokenThread.accessToken.getAccessToken()); 4 // 发起GET请求获取凭证 5 JSONObject jsonObject = CommonUtil.httpsRequestToJsonObject(requestUrl, "GET", null); 6 Ticket ticket = null; 7 String jsapi_ticket = ""; 8 int expires_in = 0; 9 if (null != jsonObject) {10 try {11 jsapi_ticket = jsonObject.getString("ticket");12 expires_in = jsonObject.getInt("expires_in");13 ticket = new Ticket();14 ticket.setTicket(jsapi_ticket);15 ticket.setExpiresIn(expires_in);16 } catch (JSONException e) {17 // 获取失败18 log.error("获取jsapi_ticket失败"+jsonObject.getInt("errcode")+","+jsonObject.getString("errmsg"));19 }20 }21 return ticket;22 }
注意:jsapi_ticket和access token为7200的有效时间。7200后要重新获取,我是放在线程里面死循环的。
4.算签名1 /** 2 * 签名实体类 3 * @author rory.wu 4 * 5 */ 6 public class Signature implements Serializable { 7 private static final long serialVersionUID = -7799030247222127708L; 8 9 private String url;10 private String jsapi_ticket;11 private String nonceStr;12 private String timestamp;13 private String signature;14 15 //下面是getset方法 16 }
1 /** 2 * 算出签名 3 * @param jsapi_ticket 4 * @param url 业务中调用微信js的地址 5 * @return 6 */ 7 public static Signature sign(String jsapi_ticket, String url) { 8 String nonce_str = CommonUtil.create_nonce_str(); 9 String timestamp = CommonUtil.create_timestamp();10 String string1;11 String signature = "";12 13 //注意这里参数名必须全部小写,且必须有序14 string1 = "jsapi_ticket=" + jsapi_ticket +15 "&noncestr=" + nonce_str +16 "×tamp=" + timestamp +17 "&url=" + url;18 try19 {20 MessageDigest crypt = MessageDigest.getInstance("SHA-1");21 crypt.reset();22 crypt.update(string1.getBytes("UTF-8"));23 signature = CommonUtil.byteToStr(crypt.digest());24 }25 catch (NoSuchAlgorithmException e)26 {27 e.printStackTrace();28 }29 catch (UnsupportedEncodingException e)30 {31 e.printStackTrace();32 }33 34 Signature result = new Signature();35 result.setUrl(url);36 result.setJsapi_ticket(jsapi_ticket);37 result.setNonceStr(nonce_str);38 result.setTimestamp(timestamp);39 result.setSignature(signature);40 41 return result;42 }
注意:有些方法在前两篇中
这样就算出签名了。
5.传递到前端页面
把随机字符串:nonce_str,timestamp时间戳,appId,签名,包装为prepay_id=prepay_id的预支付ID传递到前端。1 wx.config({2 appId: '${appId}', // 必填,公众号的唯一标识3 timestamp: ${timestamp}, // 必填,生成签名的时间戳4 nonceStr: '${nonceStr}', // 必填,生成签名的随机串5 signature: '${signature}',// 必填,签名,见附录16 jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录27 });
6.现在就可以使用微信JS了。
三、调用微信支付
在前一篇中已经获取到了预支付订单的ID,prepay_id,
1 /** 2 * 微信支付对象 3 * @author rory.wu 4 * 5 */ 6 public class WxPay implements Serializable { 7 private static final long serialVersionUID = 3843862351717555525L; 8 private String paySign; 9 private String prepay_id;10 private String nonce_str;11 private String timeStamp;12 13 //get,set方法14 }
1 /** 2 * 获取页面上weixin支付JS所需的参数 3 * @param map 4 * @return 5 */ 6 private WxPay getWxPayInfo(String prepay_id) { 7 String nonce = CommonUtil.create_nonce_str().replace("-", ""); 8 String timeStamp = CommonUtil.create_timestamp(); 9 //再算签名10 String newPrepay_id = "prepay_id="+prepay_id;11 String args = "appId="+Constants.appid12 +"&nonceStr="+nonce13 +"&package="+newPrepay_id14 +"&signType=MD5"15 +"&timeStamp="+timeStamp16 +"&key=7e6niG6sdotSuH79KnRqV8LvdrhUDgR0";17 String paySign = SignUtil.getSign(args, "MD5");18 WxPay wxPay = new WxPay();19 wxPay.setNonce_str(nonce);20 wxPay.setPaySign(paySign);21 wxPay.setPrepay_id(newPrepay_id);22 wxPay.setTimeStamp(timeStamp);23 return wxPay;24 }25
注意:有些方法在前2篇中。
微信支付的最后一步:js调用1 wx.chooseWXPay({ 2 timestamp: json.timeStamp, 3 nonceStr: json.nonce_str, 4 package: json.prepay_id, 5 signType: 'MD5', 6 paySign: json.paySign, 7 success: function (res) { 8 alert("支付成功"); 9 }10 });
结束,微信支付全部结束啦,有问题可以留言找我哦,只会java的,88
本文网址:http://www.shaoqun.com/a/143360.html
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。
JS
0
微信公众号页面支付接口java,[Java教程]微信公众号支付(三):页面调用微信支付JS并完成支付...相关推荐
- 网课搜题公众号最新可用接口含搭建教程-麦麦题
网课搜题公众号最新可用接口含搭建教程 第一步:需要注册一个公众号,如果有就直接下一步操作.没有的需要申请一个,个人注册订阅号,企业可以注册服务号. 公众号注册可以百度搜索微信公众平台进入注册,按照操作 ...
- php银行支付教学课程,php版交通银行网银支付接口开发入门教程
本文实例讲述了php版交通银行网银支付接口实现方法.分享给大家供大家参考,具体如下: 概述:网银支付接口 和支付宝接口大体上差不多,主要的区别是 交通银行提供的 接口核心的比如,加密等是通过java实 ...
- 支付宝官方支付接口申请配置教程(如何开通支付宝支付接口)
支付宝官方支付接口申请配置教程(如何开通支付宝支付接口) 支付产品开通(当面付.手机网站支付.电脑网站支付等) 注册登录支付宝(企业或个体户资质) Alipay 登录[支付宝商家] https://b ...
- 快递单号查询API接口对接Java源码示例_快递鸟
零售电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开&quo ...
- 阿里支付接口 转账 java 代码
阿里支付接口的验证机制和普通接口不同,采用的是证书验证,使用支付宝开放平台助手 ---> 生成密钥获取csr文件 公司注意些支付对应的支付宝程序所在的公司的名称. 得到生成好的3个文件 放入对应 ...
- 如何开通接入微信支付接口?(教程)
个人进去 alywlzf.com 微信支付的使用用户越来越多,现在在超市餐厅都能使用微信支付就能付款了,那么商户开通微信支付接口是怎么做到的呢?今天就来介绍下商家如何开通微信支付接口的,商户开 ...
- 个人支付接口开通(教程)
现如今,使用支付宝支付的用户越来越多,那么电脑端网站和手机端网站商户如何开通支付宝支付接口的呢? 个人申请入口https://alywlzf.com/ 一.支付产品开通(当面付.手机网站支付.电脑网站 ...
- 微信公众号添加word文档附件教程_公众号添加Excel、PDF、PPT等附件教程
写公众号文章时,有时候希望在公众号文末分享一些文档如Word.Excel.PDF之类的文档,但苦于公众号并不支持直接上传文件.插入超链接是个方案,但并不是所有的公众号都有此功能.并且微信内并不允许直接 ...
- 微信公众号添加Word文档附件教程_公众号添加Excel、PDF、PPT、Zip等附件教程
编辑公众号文章时,有时候希望在公众号文末分享一些如Word.Excel.PDF.PPT.Zip之类的文档,但是由于公众号并不支持直接上传文件,所以导致很多编辑者不知道怎么给公众号文章添加附件.插入超链 ...
- 字节三面:小伙子你先跟我说一说红黑树吧,java程序设计教程雍俊海第三版答案
来看234树的添加操作 添加如果出现需要分裂的情况,分裂出的元素首先进行和父级合并,如果父级已经是4节点那么将父级分裂,递归操作 234树的生长全部都是从叶子节点进行生长的,从叶子节点进行分裂向上延伸 ...
最新文章
- mysql 5.7报1055错误的解决方法
- debian NO_PUBKEY 8B48AD6246925553 解决方法
- Linux C编程之四 动态库(共享库)的制作
- No module named 'oscar.apps.promotions'
- C语言试题九之s=(ln(1)+ln(2)+ln(3)+…+ln(m))^0.5,s作为函数值返回
- Java线程怎么发送消息_Java客户端Socket如何能在阻塞线程下收到服务端发送来的消息?...
- python如何批量下载邮箱全部附件_Python编写执行测试用例及定时自动发送最新测试报告邮件...
- 介绍一下mysql的存储过程和搜索引擎_MySQL基础(四)—存储过程和存储引擎
- mysql哨兵机制_Sentinel:万字详解微服务的哨兵机制,我跪了
- 国外的电子商务开发情况
- Java零基础系列003——变量
- Java基础:基础加强巩固
- 《Spring实战(第四版)》pdf
- 会matlab的简历怎么写,算法工程师简历项目经验填写样本
- php坏处,cpu超频有什么坏处
- ListView中如何优化图片
- d3d纹理过滤器配置
- 【​观察】数据驱动零售变革 重塑消费体验是关键
- 金蝶软件 CITRIX无法打印解决方案
- 罗赛塔石碑Rosetta Stone安装教程