[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 "&timestamp=" + 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并完成支付...相关推荐

  1. 网课搜题公众号最新可用接口含搭建教程-麦麦题

    网课搜题公众号最新可用接口含搭建教程 第一步:需要注册一个公众号,如果有就直接下一步操作.没有的需要申请一个,个人注册订阅号,企业可以注册服务号. 公众号注册可以百度搜索微信公众平台进入注册,按照操作 ...

  2. php银行支付教学课程,php版交通银行网银支付接口开发入门教程

    本文实例讲述了php版交通银行网银支付接口实现方法.分享给大家供大家参考,具体如下: 概述:网银支付接口 和支付宝接口大体上差不多,主要的区别是 交通银行提供的 接口核心的比如,加密等是通过java实 ...

  3. 支付宝官方支付接口申请配置教程(如何开通支付宝支付接口)

    支付宝官方支付接口申请配置教程(如何开通支付宝支付接口) 支付产品开通(当面付.手机网站支付.电脑网站支付等) 注册登录支付宝(企业或个体户资质) Alipay 登录[支付宝商家] https://b ...

  4. 快递单号查询API接口对接Java源码示例_快递鸟

    零售电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开&quo ...

  5. 阿里支付接口 转账 java 代码

    阿里支付接口的验证机制和普通接口不同,采用的是证书验证,使用支付宝开放平台助手 ---> 生成密钥获取csr文件 公司注意些支付对应的支付宝程序所在的公司的名称. 得到生成好的3个文件 放入对应 ...

  6. 如何开通接入微信支付接口?(教程)

    个人进去     alywlzf.com 微信支付的使用用户越来越多,现在在超市餐厅都能使用微信支付就能付款了,那么商户开通微信支付接口是怎么做到的呢?今天就来介绍下商家如何开通微信支付接口的,商户开 ...

  7. 个人支付接口开通(教程)

    现如今,使用支付宝支付的用户越来越多,那么电脑端网站和手机端网站商户如何开通支付宝支付接口的呢? 个人申请入口https://alywlzf.com/ 一.支付产品开通(当面付.手机网站支付.电脑网站 ...

  8. 微信公众号添加word文档附件教程_公众号添加Excel、PDF、PPT等附件教程

    写公众号文章时,有时候希望在公众号文末分享一些文档如Word.Excel.PDF之类的文档,但苦于公众号并不支持直接上传文件.插入超链接是个方案,但并不是所有的公众号都有此功能.并且微信内并不允许直接 ...

  9. 微信公众号添加Word文档附件教程_公众号添加Excel、PDF、PPT、Zip等附件教程

    编辑公众号文章时,有时候希望在公众号文末分享一些如Word.Excel.PDF.PPT.Zip之类的文档,但是由于公众号并不支持直接上传文件,所以导致很多编辑者不知道怎么给公众号文章添加附件.插入超链 ...

  10. 字节三面:小伙子你先跟我说一说红黑树吧,java程序设计教程雍俊海第三版答案

    来看234树的添加操作 添加如果出现需要分裂的情况,分裂出的元素首先进行和父级合并,如果父级已经是4节点那么将父级分裂,递归操作 234树的生长全部都是从叶子节点进行生长的,从叶子节点进行分裂向上延伸 ...

最新文章

  1. mysql 5.7报1055错误的解决方法
  2. debian NO_PUBKEY 8B48AD6246925553 解决方法
  3. Linux C编程之四 动态库(共享库)的制作
  4. No module named 'oscar.apps.promotions'
  5. C语言试题九之s=(ln(1)+ln(2)+ln(3)+…+ln(m))^0.5,s作为函数值返回
  6. Java线程怎么发送消息_Java客户端Socket如何能在阻塞线程下收到服务端发送来的消息?...
  7. python如何批量下载邮箱全部附件_Python编写执行测试用例及定时自动发送最新测试报告邮件...
  8. 介绍一下mysql的存储过程和搜索引擎_MySQL基础(四)—存储过程和存储引擎
  9. mysql哨兵机制_Sentinel:万字详解微服务的哨兵机制,我跪了
  10. 国外的电子商务开发情况
  11. Java零基础系列003——变量
  12. Java基础:基础加强巩固
  13. 《Spring实战(第四版)》pdf
  14. 会matlab的简历怎么写,算法工程师简历项目经验填写样本
  15. php坏处,cpu超频有什么坏处
  16. ListView中如何优化图片
  17. d3d纹理过滤器配置
  18. 【​观察】数据驱动零售变革 重塑消费体验是关键
  19. 金蝶软件 CITRIX无法打印解决方案
  20. 罗赛塔石碑Rosetta Stone安装教程

热门文章

  1. 8.7 使用索引-notes
  2. NoSQL(2)之 Redis配置与优化
  3. spring boot api文档_精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用
  4. #1066 : 无间道之并查集
  5. 解密优酷智能生产技术,看 AI 赋能内容数字化
  6. 从阿里云七代云服务器,谈云计算四大趋势
  7. SAE帮助「海底小纵队学英语」全面拥抱Serverless
  8. Serverless Live | 9 大场景带你从零实践 Serverless
  9. FlinkX 如何读取和写入 Clickhouse?
  10. 有哪些大数据处理工具?