介绍
这篇文章将为大家详细讲解有关使用java如何实现一个微信H5支付功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
前面做了应用微信支付的回调处理,现在需要做微信公众号的支付,花了一天多时间,终于折腾出来了!鉴于坑爹的微信官方没有提供java版的演示,所以全靠自己按照同样坑爹的文档敲敲敲,所以记录下来,以供自己及后来人参考,不足之处,还请指正。
首先,我们贴出调用支付接口的H5页面,当然,在这个页面之前,还需要做很多其他的操作,我们一步一步的来。
坑爹的官方文档给了两个不同的支付接口,在微信公众平台开发中文档的“微信JS-SDK说明文档”中,给出的支付方式是下面被屏蔽的那一部分,而在商户平台的“H5调起支付API”中,又给了一份不同的接口,即下面未屏蔽正常使用的接口。关于坑爹的微信提供了两个不同的支付接口,网上搜索结果也是众说纷纷,所以,只有自己试了。当然,为了简单,我直接试了下面这一种,然后奇迹般的成功了。
& lt; % @页面语言=癹ava"contentType=皌ext/html;charset=UTF-8" pageEncoding=癠TF-8" %比; & lt; !DOCTYPE html> & lt; html> & lt; head> & lt;元http-equiv=癈ontent-Type"内容=皌ext/html;charset=UTF-8"比; & lt; title>微信网页支付& lt;/title> & lt; !- & lt;脚本类型=拔谋?javascript"脚本https://www.yisu.com/zixun/src=" http://res.wx.qq.com/open/js/jweixin-1.0.0.js "> > - -> 脚本> - -> <脚本type=" text/javascript”>/* wx.config ({ 调试:真的,//开启调试模式,调用的所有api的返回值会在客户端提醒出来,若要查看传入的参数,可以在pc端打开,参数信息会通过日志打出,仅在pc端时才会打印。 appId: appId,//必填,公众号的唯一标识 时间戳:时间戳,//必填,生成签名的时间戳 nonceStr: nonceStr,//必填,生成签名的随机串 签名:“,//必填,签的名,见附录1 jsApiList (chooseWXPay)://必填,需要使用的JS接口列表,所有JS接口列表见附录2 });*///配置信息验证后会执行现成的方法,所有接口调用都必须在配置接口获得结果之后,配置是一个客户端的异步操作//所以如果需要在页面加载时就调用相关接口,则须把相关接口放在准备函数中调用来确保正确执行//wx.ready(函数(){//参数是后台传过来的,签名加密,随机数,时间戳等全部后台处理好 var appId=" $ {appId}”; var timeStamp=" ${时间戳}”; var nonceStr=" $ {nonceStr}”; var prepay_id=" $ {prepay_id}”;//之前参数名叫包,对应的api接口,因为包是关键字,被坑了一次 var=" $ {paySign} "迹象;//支付接口 函数>如果(payway.equals (“1“)) { System.out.println(“- - - - - - - - - - -支付宝支付- - - - - - - - - - - -产生绯闻;); request.setAttribute (“WIDout_trade_no" WIDout_trade_no);//订单号 request.setAttribute (“WIDsubject" WIDsubject);//订单名称 request.setAttribute (“WIDtotal_fee" WIDtotal_fee);//付款金额 request.setAttribute (“WIDshow_url" WIDshow_url);//商品链接 request.setAttribute (“WIDbody",““);//商品描述,可空 返回“alipayapi"; }else if (payway.equals (“2“)) { System.out.println(“- - - - - - - - - - -微信支付- - - - - - - - - - - -产生绯闻;);//1,通过网页授权接口,获取到的openid 字符串openid=request.getSession () .getAttribute (“openid") +““;//处理价格单位为:分(请自行处理) WIDtotal_fee=?”; 字符串preid=getPrepayid (WIDout_trade_no WIDtotal_fee, openid);//获取预支付标示 System.out.println(“预支付标示:- - - - - - - - - - - - - - - - -“+ preid);//APPID 字符串appId=Common.appid; request.setAttribute (“appId" appId);//时间戳 时间戳字符串=(System.currentTimeMillis ()/1000) +““; request.setAttribute (“timeStamp"、时间戳);//随机字符串 字符串nonceStr=Common.randString (16) .toString (); request.setAttribute (“nonceStr" nonceStr);//预支付标识 request.setAttribute (“prepay_id"“prepay_id=? preid);//加密方式 request.setAttribute (“signType",“MD5");//组装地图用于生成的迹象 String> Map<字符串;地图=new HashMap<字符串,String> (); map.put (“appId" appId); map.put (“timeStamp"、时间戳); map.put (“nonceStr" nonceStr); map.put (“package"“prepay_id=? preid); map.put (“signType",“MD5"); request.setAttribute (“paySign"常见。号(地图,Common.MchSecret));//签名 返回“weixinpay"; 其他}{ 返回“error"; }使用java如何实现一个微信H5支付功能