
在开发过程中,实现微信网页支付功能是至关重要的。下面,我将详细介绍如何通过Java技术实现微信扫码支付,包括微信弹窗网页支付的具体步骤。
首先,我们需要判断用户所使用的支付平台。如果确认是微信平台,那么必须通过`window.location`来打开网页,因为其他方法在iOS版微信中可能无法打开,至少在新版微信中是这样的。以下是如何获取code的步骤:
1. 判断用户平台:
- 如果是微信平台,使用`window.location`打开网页,如:`http://www.xxoo.com/InterfaceAPI/code`。
- 如果不是微信平台,弹出提示:“请使用微信或者支付宝App扫码”。
```java
if(isWeiXin()){
window.location='http://www.xxoo.com/InterfaceAPI/code';
} else if(isZFB()) {
alert('请使用微信或者支付宝App扫码');
}
}
function isWeiXin() {
return false;
}
function isZFB() {
return false;
}
```
2. 获取code:
- 回调地址需要使用`URLEncoder`的utf-8编码,最终我们只获取openid,若需要获取UserInfo的其他信息,可自行测试,只需修改`scope`参数。
```java
@RequestMapping({ "code"})
public void getCode(HttpServletRequest request, HttpServletResponse response) {
try {
// 回调地址
String redirect_uri = URLEncoder.encode(
"http://www.xxoo.com/InterfaceAPI/openid?codeID=7837283",
"utf-8");
String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="
+ WechatConfig.APP_ID
+ "&redirect_uri="
+ redirect_uri
+ "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
response.sendRedirect(url);

} catch (Exception e) {
e.printStackTrace();
}
}
```
3. 接收code,获取openid:
- 这里有一个`codeid`参数,仅供参考,实际操作中我们只需获取openid。下面是如何使用GET方法获取json返回结果,并在获取到openid后重定向到支付页面。
```java
@RequestMapping({ "openid"})
public void getOpenid(String codeID, String code,
HttpServletResponse response) {
try {
// 后续处理
} catch (Exception e) {
e.printStackTrace();
}
}
```
4. 在前端支付页面输入支付金额,提交到后台。
```javascript
$.ajax({
type: "POST",
,乐竞体育官方dataType: "html",
,乐竞体育平台url: "http://www.xxoo.com/InterfaceAPI/weixinPay",
data: "value="+self.input.value,
timeout: 10000,
cache: true,
async: true,
error: function(data){
//alert(data+"---value-->"+self.input.value);
},
// ...
});
```
5. 后端接收到金额后,在后端统一下单。公众号支付需要注意的是,支付类型需改为`JSAPI`,同时需要获取openid。

```java
@RequestMapping({ "weixinPay"})
public void weixinPay(HttpServletRequest request,
HttpServletResponse response) {
// 后续处理
}
```
6. 统一下单成功后,返回的结果示例。
7. 返回的参数需要重新签名并返回到前端,签名方法与统一下单时的签名相同。签名时必须带上微信商户返回的Json格式数据。
```java
public String testunifiedOrder(int fee, String openid) {
// 后续处理
}
```
8. 前端解析json,获取对应值,唤醒微信支付。
```javascript
success: function(data) {
if(document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
} else {
onBridgeReady();
}
} else {
alert("支付失败");
}
// 微信回调
function onBridgeReady() {
// 后续处理
}
function onBridgeReady() {
// 后续处理
}
```