
点击添加
支付过程需要获取用户openid,必须经过网页授权配置才可以,要不然获取不到openid。
点击设置,按说明设置
//返回给app端相关参数,用于调用微信支付。resxml作为调用统一下单的返回值,当然返回的也是xml文件,再借助xmlutil将返回值转化为map,返回值中有生成二维码的code_url,接下来我们需要处理的是,解析二维码url在前端网页中生成二维码图片,在前端使用ajax调用统一下单接口方法,接收返回值code_url,接收返回值后在调用后台接口方法解析code_url。 * @description: 调用微信支付系统 ---统一下单api()。
咱们只考虑必填参数,其他参数可以就看你的了。
先来看看所有参数:
其中的必填参数有:
1.appid APPID (已有)
2.mch_id 商户ID (已有)
3.nonce_str 随机字符串
4.sign 签名

5.body 所支付的名称
6.out_trade_no 咱们自己所提供的订单号,需要唯一
7.total_fee 支付金额
8.spbill_create_ip IP地址
9. notify_url 回调地址
10. trade_type 支付类型
11.openid 支付人的微信公众号对应的唯一标识
只要把这11个凑齐就齐活,现在咱们从第3个开始一个一个的获取;在这之前先从官网把公众号支付的sdk下载下来,如图
主要是用其中的WXPayUtil工具类中的一些方法。当然其他的类我看不懂,要是看懂了,就不至于这么费劲了。
好了开始咱们的取值之旅了:
1.appid APPID (已有)
2.mch_id 商户ID (已有)
3.nonce_str 随机字符串用WXPayUtil中的generateNonceStr()即可,就是生成UUID的方法;
4.sign 签名 用WXPayUtil中的generateSignature(finalMap<String, String> data, String key)方法,data是将除了sign外,其他10个参数放到map中,key是四大配置参数中的API秘钥(paternerKey)(这里不要着急管它,最后处理它);
5.body 所支付的名称
6.out_trade_no 自己后台生成的订单号,只要保证唯一就好:如“2018013000001”

7.total_fee 支付金额 单位:分,为了测试此值给1,表示支付1分钱
2.游戏ip地址单机测试就改127.0.0.1如果是外网测试就改成你的外面ip。 public static string spbill_create_ip = "127.0.0.1"。127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1。
9.notify_url 回调地址:这是微信支付成功后,微信那边会带着一大堆参数(XML格式)请求这个地址多次,这个地址做我们业务处理如:修改订单状态,赠送积分等。Ps:支付还没成功还想这么远干嘛,最后再说。地址要公网可以访问。
10.trade_type 支付类型 咱们是公众号支付此处给“JSAPI”
appid是微信公众账号或开放平台app的唯一标识,在公众平台申请公众账号或者在开放平台申请app账号后,。 if ("jsapi".equals(inittype)) {//只有公众号微信支付才会调用该类型。具体而言,某些业务依旧不能实现:为什么要进行全网发布接入检测,是依靠公众号服务自身的开发参数设置来完成的:为什么要进行消息加密.com)上接入公众号登录授权,也需要安全的开发者资质,开发者创建公众号服务之前微信支付java开发详细,在登录授权之后,测试通过后、网页授权等相应业务能力,提交全网发布,因此无需公众号设置繁琐参数,需要进行消息加密,提供对公众平台功能的行业优化和公众号的行业解决方案。
获得openid的部分内容应该不属于微信支付的范畴,属于微信公众号网页授权的东西,详情请参考微信网页授权:
https://mp.weixin.qq.com/s。地址:https://mp.weixin.qq.com。https://mp.weixin.qq.com/s/iumwuqiwdrwj-xp3hw_j1w。
第一步:用户同意授权,获取code
//https://open.weixin.qq.com/connect/oauth2/authorize。 header('location:https://open.weixin.qq.com/connect/oauth2/authorize。//string postcodeurl = "https://open.weixin.qq.com/connect/oauth2/authorize。
注意:1. redirect_uri参数:授权后重定向的回调链接地址,请使用urlEncode对链接进行处理。
2.scope:用snsapi_base。
通过此链接可以获取code,可以在一个空页面设置一个a标签,链接至其redirect_uri的地址。点击a标签,即可链接到redirect_uri的地址,并携带code。
<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx15c*********&redirect_uri=http%3a%2f%2fwww.***.com%2fpay.jsp&response_type=code&cope=snsapi_base#wechat_redirect">去支付页面pay.jsp并携带code</a>
第二步:通过code换取网页授权access_token(其实微信支付就没有必要获取access_token了,咱们只要其中openid,不是要用户信息,此步结果已经就含有咱们需要的openid了)
获取code后,请求以下链接获取access_token:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
上一步的code有了,对于此链接的参数就容易了。可是在页面上如何处理是个问题,我是在pay.jsp页面加载完成后将获取code当做参数传异步到后台,在后台中用http相关类发送get请求(可以自行网上查找)。返回的JSON结果为:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID",//就是它,只要这个值 "scope":"SCOPE" }

//若传递了相关参数,则调统一下单接口,获得后续相关接口的入口参数。resxml作为调用统一下单的返回值,当然返回的也是xml文件,再借助xmlutil将返回值转化为map,返回值中有生成二维码的code_url,接下来我们需要处理的是,解析二维码url在前端网页中生成二维码图片,在前端使用ajax调用统一下单接口方法,接收返回值code_url,接收返回值后在调用后台接口方法解析code_url。 sendto()函数主要用于sock_dgram类型套接口向to参数指定端的套接口发送数据报。
1.appid APPID (已有)
2.mch_id 商户ID (已有)
3.nonce_str 随机字符串用WXPayUtil中的generateNonceStr()即可,就是生成UUID的方法;
4.sign 签名 用WXPayUtil中的publicstatic String generateSignature(final Map<String, String> data, Stringkey)方法,data是将除了sign外,其他10个参数放到map中,key是四大配置参数中的API秘钥(paternerKey)(此时可以处理它了,不过其他10个参数都有了,它就easy了,先new一个map,依次put其他10个参数,就可以用generateSignature方法了,得到了sign后,不要忘记再将sign put到只有10个参数的map中,这样才能凑齐最后的第11个参数。准备召唤神龙吧。);
5.body 所支付的名称
6.out_trade_no 自己后台生成的订单号,只要保证唯一就好:如“2018013000001”
7.total_fee 支付金额 单位:分,为了测试此值给1,表示支付1分钱
8.spbill_create_ip IP地址 网上很多ip的方法,自己找,此处测试给“127.0.0.1”
9.notify_url 回调地址:这是微信支付成功后,微信那边会带着一大堆参数(XML格式)请求这个地址多次,这个地址做我们业务处理如:修改订单状态,赠送积分等。Ps:支付还没成功还想这么远干嘛,最后再说。地址要公网可以访问。
10.trade_type 支付类型 咱们是公众号支付此处给“JSAPI”
11.openid (已有)
好了,准备工作完成,开始发送POST请求吧,上面提到网上找到的get请求的方法,此处用到post请求的方法,请求微信"统一下单接口https://api.mch.weixin.qq.com/pay/unifiedorder。发送前先用WXPayUtil工具类中的public static String mapToXml(Map<String,String> data)方法将有11个参数的map转成XML格式。发送后会返回String类型的返回值,如果你够幸运的话应该会得到XML的字符串:
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[wx2421b1370e3b]]></appid> <mch_id><![CDATA[10000100]]></mch_id> <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str> <openid><![CDATA[oUpF8uMuAJO_M2pxb1Q9zNjWeS6o]]></openid> <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign> <result_code><![CDATA[SUCCESS]]></result_code> <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id> <trade_type><![CDATA[JSAPI]]></trade_type> </xml>
如果你得到了以上的字符串,那么先恭喜你,坚持看到这,说明你的耐心还是不错的,因为“统一下单”接口调用完毕,可是并没有什么实际的效果,因为微信里想出现支付的界面是在前台完成的现在咱们还在后台玩耍,前面提到的我是页面加载完成时异步到后台的,咱们要返回异步的结果了,好了趁热继续吧。“统一下单”这么费劲的完成其实搞那么麻烦,就是为了得到上面红色的prepay_id(丫的,就这么一个参数给咱们搞的都想说***了)。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-112418-1.html
美国早就很清楚
一缕温暖
这是要众筹范冰冰的节奏啊