java(服务器端)调用支付宝和微信支付功能
Java服务器端调用支付宝和微信支付功能
最近项目上用到了调用微信和支付宝的第三方支付接口,因为以前没用过,所以这次用到了之后总结一下分享给大家。这篇文章将介绍两种支付方式,即app支付和扫码支付方式。
一、app支付(这里只介绍java端调用支付,安卓或iOS客户端不涉及)
1.1 支付宝app支付1.1.1 支付宝app支付接口首先,我们需要在支付宝开发者平台上申请一个商户ID和API密钥。然后,我们可以使用以下java代码来调用支付宝的app支付接口:
```javaimport java.util.HashMap;
import java.util.Map;
import javax.servlet. org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class AlipayController {
@PostMapping("/alipay/appPay")
public String appPay(@RequestBody Map
//1. 初始化支付宝SDK AlipayClient alipayClient = new AlipayClient(" "your_app_id", "your_private_key");
//2. 构造请求参数 Map
requestParams.put("biz_content", "{"out_trade_no":"your_out_trade_no","subject":"your_subject","total_amount":"your_total_amount"}");
requestParams.put("notify_url", " requestParams.put("return_url", " //3. 调用支付宝app支付接口 String result = alipayClient.sdkTradeWapPay(requestParams);
return result;
}
}
```
1.1.2 支付宝app支付回调当用户完成支付后,支付宝会向我们的服务器端发送一个回调请求。我们需要在回调接口中处理这个请求,并将结果返回给支付宝。
```javaimport java.util.HashMap;
import java.util.Map;
import javax.servlet. org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class AlipayController {
@PostMapping("/alipay/notify")
public String notify(@RequestBody Map
//1. 验证回调请求的签名 String sign = getSign(params);
if (!sign.equals("your_sign")) {
return "fail";
}
//2. 处理回调请求 String result = handleNotify(params);
return result;
}
}
```
1.2 微信app支付微信app支付的接口和支付宝类似,我们需要在微信开发者平台上申请一个商户ID和API密钥。然后,我们可以使用以下java代码来调用微信的app支付接口:
```javaimport java.util.HashMap;
import java.util.Map;
import javax.servlet. org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class WechatController {
@PostMapping("/wechat/appPay")
public String appPay(@RequestBody Map
//1. 初始化微信SDK WechatClient wechatClient = new WechatClient(" "your_app_id", "your_private_key");
//2. 构造请求参数 Map
requestParams.put("appid", "your_app_id");
requestParams.put("mchid", "your_mch_id");
requestParams.put("nonce_str", getNonceStr());
requestParams.put("body", "your_body");
requestParams.put("total_fee", "your_total_fee");
//3. 调用微信app支付接口 String result = wechatClient.sdkPay(requestParams);
return result;
}
}
```
1.2.2 微信app支付回调当用户完成支付后,微信会向我们的服务器端发送一个回调请求。我们需要在回调接口中处理这个请求,并将结果返回给微信。
```javaimport java.util.HashMap;
import java.util.Map;
import javax.servlet. org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class WechatController {
@PostMapping("/wechat/notify")
public String notify(@RequestBody Map
//1. 验证回调请求的签名 String sign = getSign(params);
if (!sign.equals("your_sign")) {
return "fail";
}
//2. 处理回调请求 String result = handleNotify(params);
return result;
}
}
```
二、扫码支付
2.1 支付宝扫码支付2.1.1 支付宝扫码支付接口我们可以使用以下java代码来调用支付宝的扫码支付接口:
```javaimport java.util.HashMap;
import java.util.Map;
import javax.servlet. org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class AlipayController {
@PostMapping("/alipay/scanPay")
public String scanPay(@RequestBody Map
//1. 初始化支付宝SDK AlipayClient alipayClient = new AlipayClient(" "your_app_id", "your_private_key");
//2. 构造请求参数 Map
requestParams.put("biz_content", "{"out_trade_no":"your_out_trade_no","subject":"your_subject","total_amount":"your_total_fee"}");
requestParams.put("notify_url", " requestParams.put("return_url", " //3. 调用支付宝扫码支付接口 String result = alipayClient.sdkTradeWapPay(requestParams);
return result;
}
}
```
2.1.2 支付宝扫码支付回调当用户完成支付后,支付宝会向我们的服务器端发送一个回调请求。我们需要在回调接口中处理这个请求,并将结果返回给支付宝。
```javaimport java.util.HashMap;
import java.util.Map;
import javax.servlet. org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class AlipayController {
@PostMapping("/alipay/notify")
public String notify(@RequestBody Map
//1. 验证回调请求的签名 String sign = getSign(params);
if (!sign.equals("your_sign")) {
return "fail";
}
//2. 处理回调请求 String result = handleNotify(params);
return result;
}
}
```
2.2 微信扫码支付微信扫码支付的接口和支付宝类似,我们可以使用以下java代码来调用微信的扫码支付接口:
```javaimport java.util.HashMap;
import java.util.Map;
import javax.servlet. org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class WechatController {
@PostMapping("/wechat/scanPay")
public String scanPay(@RequestBody Map
//1. 初始化微信SDK WechatClient wechatClient = new WechatClient(" "your_app_id", "your_private_key");
//2. 构造请求参数 Map
requestParams.put("appid", "your_app_id");
requestParams.put("mchid", "your_mch_id");
requestParams.put("nonce_str", getNonceStr());
requestParams.put("body", "your_body");
requestParams.put("total_fee", "your_total_fee");
//3. 调用微信扫码支付接口 String result = wechatClient.sdkPay(requestParams);
return result;
}
}
```
2.2.2 微信扫码支付回调当用户完成支付后,微信会向我们的服务器端发送一个回调请求。我们需要在回调接口中处理这个请求,并将结果返回给微信。
```javaimport java.util.HashMap;
import java.util.Map;
import javax.servlet. org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestControllerpublic class WechatController {
@PostMapping("/wechat/notify")