位置: 首页 > 苏州JAVA > 太仓java培训班多少钱
太仓java培训班多少钱
预约试听
太仓java培训班多少钱
其然IT 教育师资

太仓java培训班多少钱

太仓java培训班多少钱

Java开发的应该 如何掌握上述相关技术?

太仓java培训班多少钱

Java开发的应该如何掌握上述相关技术?

一:首先,有这样的一种情况很常见,对于想自学Java开发的人来说,他们 大多数都是非常盲目的,不知道自己改如何入手,很多人在网上找一些视频,然后疯狂的过视频,很快就把一块内容都学完,他们理解的学完了就是视 频看完了,但是让他们动手去做东西却做不出来,而我的理解学完了就是自己能写出东西,所以对于初学者来说一定不能盲目,要有自己的规划,不然 就是浪费时间白忙活。

二:既然是学习Java开发专业技术,我个人的建议是,一定要有一个能指导 你的人,不能都靠自己闭门造车,这样的行为并不聪明,结识一位这方面的人才,时不时去问问人家问题,不然你可能会发现一个小问题能困扰你一天 ,**后还不知道是什么原因。

三:学习Java开发技术,不能跟学数学语文一样对待,比较刚接触代码是不 容易记住的,所以要掌握上述的技术,你还要知道学习Java开发技术有哪些“坑”。对于学习方法这块是尤为重要的,怎么学才能让你学完了能记住之 前学的那些,不至于学完了就忘,这个问题值得你学习之前去思考的。

四:根据我多年的学习情况来看,你平时一定要养成好的学习习惯,就说我 自己吧!我就喜欢把自己曾经遇到的问题整理在电脑的日记本上,然后我会搜集一下博客相关的Java技术文章,一些我认为比较有用的网站,以后都能 用的上,这是我个人的学习习惯,相信我,如果你想走的更远,一定要养成习惯。

**后给大家一些详细的学习安排路线:

Java基础:Java基础语法、数组、类与对象、继承与多态、异常、范型、集 合、流与文件、反射、枚举、自动装箱和注解。

数据库:mysql、oracle

Javaweb:HTML与CSS网页开发基础、Java脚本语言、搭建开发环境、JSP基 本语法、JSP内置对象、JavaBean技术、Servlet技术、Ajax技术

框架:Struts2、Hibernate、Spring、SpringMVC、mybatis

java工程师课程


太仓java培训班多少钱

课程大纲

一阶段 二阶段 三阶段
  • 语言基础、Java基础

  • Java多线程

  • Java网络编程

  • 程序调试/单元测试

  • XML

  • 数据库

  • 数据结构与算法

  • Html/Css/Javascript

  • Html5开发

  • CSS3

  • CSS命名规范、优化 、使用技巧

  • JSP、Servlet、Ajax 、数据库缓冲池、Tomcat

  • 项目开发流程及管理 、CMMI

  • 云计算

  • 大数据

  • 设计模式

  • MyBatis

  • Redis

  • Spring

  • SpringBoot

  • JMS

  • SpringCloud

  • Docker

  • Java前沿技术 常用 企业解决方案

  • UML/OOD/OOP

微信公众号开发和微信支付


>

博客这么久没写了(因为女朋友(^__^) 嘻嘻……),今天决定把微信相关开发遇到的坑给大家分享一下,以免大家掉入坑浪费过多的时间! 我会在文章末尾上传一个开箱即用的微信公众号支付的demo,理论上来讲你只需要修改配置文件就可以支付了。 使用的技术:SPRingBoot、angularJs。 使用了一个第三方的微信mavne依赖: weixin-java-mp在pom可以看见,时过境迁可能weixin-java-mp版本更新了。weixin-java-mp的API:https://github.com/chanjarster/weixin-java-tools/wiki mavne依赖在中央仓库可以查找:http://mvnrepository.com/

微信公众号配置

access.properties文件

该文件中主要配置公众号和微信支付相关参数,里面的信息在申请公众号和申请微信支付就会得到(开箱即用也就是修改这个配置文件里面的内容) 该工具类主要映射access.properties文件键的名称 读取access.properties文件的方式为: String appId=PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_APPID)

初始化配置公众号

/** * 初始化微信配置 */ public class WeiXinInitConfigUtil { public static WxMpInMemoryConfigStorage wxMpConfigStorage; public static WxMpService wxMpService; public static WxMpMessageRouter wxMpMessageRouter; public static WxMpOAuth2AccessToken wxMpOAuth2AccessToken; //注意静态块,这里使用的是weixin-java-mp的API,直接对应配置文件填上去。 static { WxMpInMemoryConfigStorage storage=new WxMpInMemoryConfigStorage(); storage.setAppId(PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_CORPID)); storage.setSecret(PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_CORPSECRET)); storage.setToken(PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_APP_APPID_TOKEN)); storage.setAesKey(PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_APP_APPID_AESKEY)); wxMpConfigStorage=storage; wxMpService = new WxMpServiceImpl(); wxMpService.setWxMpConfigStorage(storage); wxMpMessageRouter = new WxMpMessageRouter(wxMpService); } }

封装当前用户

用拦截器来配置需要的校验参数 。

/** * Created by orange on 2016/10/27. * 获取微信用户相关信息的拦截器,该拦截器将会过滤所有请求,进行是否包含 微信登录用户的判断。 */ @Component public class WxCpIntercepter implements HandlerInterceptor { private static final long serialVersionUID = 1L; private static final Logger logger = LoggerFactory.getLogger(WxCpIntercepter.class); //在请求处理之前进行调用(Controller方法调用之前) @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String userAgent = request.getHeader("user-agent"); //获取session里面的用户对象 WxMpUser wxUser = (WxMpUser) request.getSession().getAttribute(SampleConstants.WEIXIN_USER); //获取request中的code String code = request.getParameter("code"); //当request请求里面有code,但是session里面没有weixinUser(登录微信用户),将会查询的微信用户封装到session中 if (code != null && wxUser == null) { WxCpUtil.setUserIdForSession(request); } //设置微信校验参数到session中 WxCpUtil.openContact(request); return true;// 只有返回true才会继续向下执行,返回false取消当前请求 } //请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后) @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作) @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }

对拦截器进行统一配置

/** * Created by orange on 2016/10/27. * 拦截器集中配置类 */ @Configuration public class FilterConfiguration extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { // 多个拦截器组成一个拦截器链 // addPathPatterns 用于添加拦截规则 // excludePathPatterns 用户排除拦截 //这里可添加多个拦截器 registry.addInterceptor(new WxCpIntercepter()).addPathPatterns("/**"); super.addInterceptors(registry); } }

拦截器使用的WxCpUtil类代码

public class WxCpUtil { private static final Logger logger = LoggerFactory.getLogger(WxCpUtil.class); /** * 判断用户是否关注了公众号 * @param token * @param openid * @return */ public static boolean judgeIsFollow(String token,String openid){ int zhi=0; InputStream is=null; String url = "https://api.weixin.QQ.com/cgi-bin/user/info?access_token=" token "&openid=" openid "&lang=zh_CN"; try { URL urlGet = new URL(url); HttpURLConnection http = (HttpURLConnection) urlGet.openConnection(); http.setRequestMethod("GET"); // 必须是get方式请求 http.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); http.setDoOutput(true); http.setDoInput(true); http.connect(); is = http.getInputStream(); int size = is.available(); byte[] jsonBytes = new byte[size]; is.read(jsonBytes); String message = new String(jsonBytes, "UTF-8"); //序列化json字符串 Gson gson = WxMpGsonBuilder.INSTANCE.create(); JsonObject jsonObject = (JsonObject)gson.fromJson(message, JsonObject.class); //用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,1的时候表示关注了。 zhi = jsonObject.get("subscribe").getAsInt(); } catch (Exception e) { e.printStackTrace(); }finally { if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return 1==zhi; } //获取设置微信用户 public static void setUserIdForSession(HttpServletRequest request) throws UnsupportedEncodingException { //**code获取微信用户信息 String code = request.getParameter("code"); String state = request.getParameter("state"); logger.debug("code={}", code); logger.debug("state={}", state); String[] res = null; try { wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code); WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null); String token = wxMpService.getAccessToken(); //判断用户是否关注 boolean flag = judgeIsFollow(token, wxMpUser.getOpenId()); if(!flag){//用户没有关注 //公众号让他关注 } request.getSession().setAttribute(SampleConstants.WEIXIN_USER, wxMpUser); } catch (WxErrorException e) { e.printStackTrace(); } } //设置微信校验参数 public static void openContact(HttpServletRequest request) { try { String ip = request.getRemoteAddr(); logger.debug("ip地址={}",ip); String urlStr = WxCpUtil.getFullURL(request); logger.debug("request.getRequestURI() = {}", urlStr); if (urlStr.indexOf("goto") > -1 || urlStr.indexOf("menu") > -1) { WxJsapiSignature signature = wxMpService.createJsapiSignature(urlStr); request.getSession().setAttribute("signature", signature); } } catch (WxErrorException e) { e.printStackTrace(); try { throw new ServletException(); } catch (ServletException e1) { e1.printStackTrace(); } } } public static String getFullURL(HttpServletRequest request) { String SeverNameForURI = PropertyHandler.getInstance().getValue("SeverNameForURI"); String uri = request.getScheme() "://" SeverNameForURI request.getRequestURI() (request.getQueryString() != null ? "?" request.getQueryString() : ""); return uri; } public static WxJsGroupSignature createGroupapiSignature(String url) throws WxErrorException { String accerssToken=wxMpService.getAccessToken(); String zhi = wxMpService.getJsapiTicket(); JsonElement tmpJsonElement = (new JsonParser()).parse(zhi); JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); String jsapiGroupErrcode = tmpJsonObject.get("errcode").getAsString(); String jsapiGroupId = tmpJsonObject.get("group_id").getAsString(); String jsapiGroupTicket = tmpJsonObject.get("ticket").getAsString(); long timestamp = System.currentTimeMillis() / 1000L; String noncestr = RandomUtils.getRandomStr(); String signature = SHA1.genWithAmple(new String[]{"group_ticket=" jsapiGroupTicket, "noncestr=" noncestr, "timestamp=" timestamp, "url=" url}); WxJsGroupSignature jsGroupapiSignature = new WxJsGroupSignature(); jsGroupapiSignature.setTimestamp(timestamp); jsGroupapiSignature.setNonceStr(noncestr); jsGroupapiSignature.setUrl(url); jsGroupapiSignature.setSignature(signature); jsGroupapiSignature.setGroupId(jsapiGroupId); jsGroupapiSignature.setGroupErrcode(jsapiGroupErrcode); jsGroupapiSignature.setGroupTicket(jsapiGroupTicket); jsGroupapiSignature.setAccessToken(accerssToken); logger.debug("jsapiGroupErrcode=[{}],jsapiGroupId=[{}],jsapiGroupTicket=[{}],jsapiGroupSignature=[{}]", jsapiGroupErrcode, jsapiGroupId, jsapiGroupTicket, jsGroupapiSignature.getSignature()); return jsGroupapiSignature; } }

至此我们已经把公众号需要的配置全部封装到session里面去了,接下来我们只需要用Ajax向后台发起请求获取配置就好了。

微信支付配置

**步和第二步

微信支付平台地址:https://pay.weixin.qq.com/ 微信公众平台地址:https://mp.weixin.qq.com/ **步在微信支付平台设置key:安全中心—->API安全 第二步在微信公众平台设置测试授权目录和测试白名单:微信支付—->开发配置(注意:授权目录一定要精确到调用html页面**后一级,比如你的支付页面url为:www.orange.com/pay/test/pay.html那么你的授权目录为:www.orange.com/pay/test/)

第三步

获取统一下单号和微信JSAPI需要参数。 统一下单号的说白了就是微信返回给你的订单号,JSAPI是需要这个订单号再次进行访问微信服务器的,微信服务器就根据这个订单号获取统一下单的详细信息包括,(多少钱,买了什么东西,等等….),然后调用微信的支付客户输入密码付钱。 这里有两点需要我们注意。 微信加密校验地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1 1、微信的加密方式:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3 2、微信统一下单需要的参数:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 具体代码

@Controller public class GetUnifiedOrderController { /** * @return 微信支付参数 */ @ResponseBody @RequestMapping("/GetUnifiedOrderController") public WXPayBean GetUnifiedOrderController(HttpServletRequest request){ //生成订单xml String orderInfo=createOrderInfo(request); //调用统一下单API,获取订单号 String prepay_id = httpOrder(orderInfo); //生成**后支付的对象 WXPayBean wxpayBean = startPay(prepay_id); return wxpayBean; } /** * 生成订单XML * @return */ private String createOrderInfo(HttpServletRequest request) { String appId = PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_APPID); String mchId = PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_MCHID); String key = PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_KEY); // orderId 商户订单号商户支付的订单号由商户自定义生成,微信支付要求商户订单号保持唯一性(建议根据当前系统时间加随机序列来生成订单号)。 // 重新发起一笔支付要使用原订单号,避免重复支付;已支付过或已调用关单、撤销(请见后文的API列表)的订单号不能重新发起支付。 String orderId=wxPayUtils.makeUUID(); //获取当前用户的openid WxMpUser wxUser = (WxMpUser) request.getSession().getAttribute(SampleConstants.WEIXIN_USER); String openid = wxUser.getOpenId(); //随机字符串 String uuid = wxPayUtils.makeUUID(); //根据规则创建可排序的map集合 SortedMap<String, Object> packageParams = new TreeMap<String, Object>(); packageParams.put("appid", appId);//公众账号ID packageParams.put("mch_id",mchId);//商户号 packageParams.put("nonce_str",uuid);//随机字符串 packageParams.put("body","我是商品描述");//商品描述 注意加上<![CDATA[ ]]>保证解析器忽略解析里面的内容 packageParams.put("out_trade_no", orderId);//商户订单号 packageParams.put("total_fee",1);//金额需要扩大100倍:1代表支付的是0.01元 packageParams.put("spbill_create_ip","171.221.149.199");//用户IP地址 packageParams.put("notify_url", "1598m20l41.51mypc.cn/gotoMap/scanCoedOk");//通知地址 packageParams.put("trade_type", "JSAPI");//JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付 packageParams.put("openid",openid);//前用户的openid //获取签名(使用工具类里面的加密方法,大家可以直接将工具类拷贝到自己的项目中使用) String sign = wxPayUtils.md5Str(packageParams,key); //拼接成一个xml。 String xml="<xml>" "<appid>" appId "</appid>" "<mch_id>" mchId "</mch_id>" "<nonce_str>" uuid "</nonce_str>" "<sign>" sign "</sign>" "<body><![CDATA[" "我是商品描述" "]]></body>" "<out_trade_no>" orderId "</out_trade_no>" "<total_fee>" 1 "</total_fee>" "<spbill_create_ip>" "171.221.149.199" "</spbill_create_ip>" "<notify_url>" "1598m20l41.51mypc.cn/gotoMap/scanCoedOk" "</notify_url>" "<trade_type>" "JSAPI" "</trade_type>" "<openid>" openid "</openid>" "</xml>"; return xml; } /** * 调用统一下单API * @param orderInfo * @return */ private String httpOrder(String orderInfo) { String url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; try { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); //加入数据 conn.setRequestMethod("POST"); conn.setDoOutput(true); BufferedOutputStream buffOutStr = new BufferedOutputStream(conn.getOutputStream()); buffOutStr.write(orderInfo.getBytes()); buffOutStr.flush(); buffOutStr.close(); //获取输入流 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; StringBuffer sb = new StringBuffer(); while((line = reader.readLine())!= null){ sb.append(line); } //解析xml SAXReader reader1 = new SAXReader(); reader1.setEncoding("utf-8"); Document document; document = reader1.read(new ByteArrayInputStream(sb.toString().getBytes("UTF-8"))); Element element = document.getRootElement();//得到xml跟标签,此处是<root></root> Element prepay_idElement = element.element("prepay_id"); String prepay_id = prepay_idElement.getData() ""; Element return_codeElement = element.element("return_code"); String return_code = return_codeElement.getData() ""; Element result_codeElement = element.element("result_code"); String result_code = result_codeElement.getData() ""; if("SUCCESS".equals(return_code)&&"SUCCESS".equals(result_code)){ //当都为SUCCESS的时候才将统一下单id返回出去 return prepay_id; } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 设置微信支付**后一步所需要的参数 * @param prepay_id 统一支付id * @return 支付对象 */ private WXPayBean startPay(String prepay_id){ String appId = PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_APPID); String key = PropertyHandler.getInstance().getValue(SampleConstants.WEIXIN_KEY); WXPayBean wxPayBean=new WXPayBean(); String timeStamp = String.valueOf((System.currentTimeMillis() / 1000));//1970年到现在的秒数 String nonceStr =wxPayUtils.makeUUID();//随机字符串 String signType = "MD5"; SortedMap<String, Object> packageParams = new TreeMap<String, Object>(); packageParams.put("appId",appId);//注意这里的appId中的I是大写的喔不要弄错了。 packageParams.put("timeStamp",timeStamp); packageParams.put("nonceStr",nonceStr); packageParams.put("signType",signType); packageParams.put("package","prepay_id=" prepay_id); //获取签名(用同样的方式加密) String paySign = wxPayUtils.md5Str(packageParams, key); //封装微信支付实例 wxPayBean.setTimeStamp(timeStamp); wxPayBean.setNonceStr(nonceStr); wxPayBean.setPackage_("prepay_id=" prepay_id); wxPayBean.setSignType(signType); wxPayBean.setPaySign(paySign); return wxPayBean ; } } 至此我们已经封装完成微信支付需要的全部配置,等待JSAPI向我们请求数据就好了。

工具类wxPayUtils代码

/** * Created by orange on 2017/1/19. * 微信支付工具类 */ public class wxPayUtils { /** * * @param params 需要签名的参数,键值对 * @param key (支付平台的安全密钥)key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 * @return MD5加密后转换为大写返回 */ public static String md5Str(SortedMap<String, Object>params,String key){ //**步 键按照字典序 StringBuffer sb = new StringBuffer(); Set es = params.entrySet(); Iterator it = es.iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String k = entry.getKey() ""; String v = entry.getValue() ""; //为空不参与签名、参数名区分大小写 if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) { sb.append(k "=" v "&"); } } //第二步拼接key sb.append("key=" key); //MD5加密 转换为大写返回 String sign=""; try{ String zhi = new String(sb.toString().getBytes("UTF-8")); sign=getMd5Str(zhi).toUpperCase(); }catch (UnsupportedEncodingException e){ e.printStackTrace(); } return sign; } /** * 时间戳和随机数创建UUID * @return */ public static synchronized String makeUUID() { Date date = new Date(); String dateStr = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date) ""; StringBuffer s = new StringBuffer(dateStr); return s.append((new Random().nextInt(900) 100)).toString(); } //MD5加密 public static String getMd5Str(String sourceStr){ String result = ""; try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(sourceStr.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset ) { i = b[offset]; if (i < 0) i = 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } result = buf.toString(); System.out.println("MD5(" sourceStr ",32) = " result); System.out.println("MD5(" sourceStr ",16) = " buf.toString().substring(8, 24)); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return result; } }

微信支付JS

微信SDK说明:https://mp.weixin.qq.com/wiki

<!DOCTYPE html> <html lang="en"> <head> <title>微信支付</title> <meta charset="utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, minimum-scale=1.0"/> <meta http-equiv="Access-Control-Allow-Origin" content="*"/> <meta name="description" content="" /> <meta name="author" content="" /> <link href="/CSS/mycss.css" rel="stylesheet" /> <script src="//cdn.bootcss.com/angular.js/1.5.7/angular.min.js"></script> <script src="//cdn.bootcss.com/angular.js/1.5.7/angular-animate.min.js"></script> <script src="//cdn.bootcss.com/angular.js/1.5.7/angular-resource.min.js"></script> <script src="//cdn.bootcss.com/angular.js/1.5.7/angular-route.min.js"></script> <script src="//cdn.bootcss.com/angular.js/1.5.7/angular-messages.min.js"></script> <script src="//cdn.bootcss.com/jquery/1.12.4/jquery.js"></script> <script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js" type="text/Javascript"></script> <script src="//cdn.bootcss.com/zepto/1.1.6/zepto.min.js"></script> <script src="/js/pay/pay.js"></script> <script> var myApp=angular.module("myApp",[]); myApp.controller("myController",function ($scope,$location,$http) { //获取微信js配置签名(后台java类:ContacterController.java) var url="/getContacter"; var parObj={} //这里可以使用AJAX替换就是向后台请求数据。(这是angular的写法) $http.get(url,{params:parObj}).success(function(wxParm) { if(wxParm.success){ //设置微信支付的配置 getPay(wxParm); } }); //获取微信支付配置参数 function getPay(wxParm) { //(后台java类:GetUnifiedOrderController.java) var url="/GetUnifiedOrderController"; var parObj={} //这里可以使用AJAX替换就是向后台请求数据。(这是angular的写法) $http.get(url,{params:parObj}).success(function(payParm) { console.log(payParm); //调用pay.js的方法 wxconfigMap(wxParm,payParm); }); } }); </script> </head> <body ng-app="myApp" ng-controller="myController"> <h1>正在打开微信支付接口.....</h1> </body> </html>

pay.js代码

/** * Created by orange on 2016/11/16. */ var wxmap;//全局参数map包含微信初始化相关参数 var paymap; //微信支付的相关参数 //设置微信相关参数 function wxconfigMap(wxParm,payParm){ wxmap=wxParm; paymap=payParm; wx.config({ debug: false, appId: wxxxxxxx , timestamp: wxmap.time, nonceStr: wxmap.randomStr, signature:wxmap.signature, jsApiList: [ chooseWXPay ] }); } //微信接口设置完毕回调方法 wx.ready(function () { wx.chooseWXPay({ timestamp: paymap.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但**新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 nonceStr: paymap.nonceStr, // 支付签名随机串,不长于 32 位 package: paymap.package_, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) signType:paymap.signType, // 签名方式,默认为 SHA1 ,使用新版支付需传入 MD5 paySign: paymap.paySign, // 支付签名 success: function (res) { // alert( 支付成功! ); // 支付成功后的回调函数 } }); }); wx.error(function (res) { alert(res.errMsg); });

需要警惕地方

1、后台在进行加密的时候一定要注意大小写,加密是32位的。 2、获取统一下单Id的时候 注意body里面的内容要使用[CDATA[]]包含起来。 3、注意测试授权目录一定是**后一级。 4、微信wx.chooseWXPay({})方法里面的 timeStamp的值是秒数,后台要用毫秒数除以1000不要弄成毫秒数了。 5、代码出了bug淡定点笑着面对千万不要心急喔,加油!!!! 6、demo**地址: https://pan.baidu.com/s/1i58z33B


相关推荐:


苏州JAVA培训   苏州JAVA培训班   苏州JAVA培训机构

苏州其然软件开发培训

进入机构首页
苏州其然软件开发

上课地址:苏州市昆山市震川西路111号名仕大厦

预约试听

倒计时:
11 : 58 : 41
其他试听课程
机构全部课程

学校课程导航