這篇文章主要講解了“java支付功能怎么實現(xiàn)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java支付功能怎么實現(xiàn)”吧!
10年的羅平網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整羅平建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“羅平網(wǎng)站設(shè)計”,“羅平網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
首先我們先看下API:
package com.joe.pay;
import com.joe.pay.pojo.*;
/**
* 支付服務(wù)接口
*
* @author joe
* @version 2018.06.29 11:32
*/
public interface PayService {
/**
* 調(diào)用第三方支付
*
* @param request 支付參數(shù)
* @return 支付結(jié)果
*/
SysResponse<PayResponse> pay(PayRequest request);
/**
* 申請退款
*
* @param request 退款請求
* @return 退款響應(yīng)
*/
SysResponse<RefundResponse> refund(RefundRequest request);
}
可以看到,PayService接口提供了支付方法和退款方法,下面我們看下支付方法的參數(shù)定義:
package com.joe.pay.pojo;
import lombok.Data;
/**
* 支付參數(shù),除了openid外所有參數(shù)必填
*
* @author joe
* @version 2018.07.02 10:36
*/
@Data
public class PayRequest implements Request{
/**
* 商戶網(wǎng)站唯一訂單號
*/
private String outTradeNo;
/**
* 對一筆交易的描述信息
*/
private String body;
/**
* 商品的標(biāo)題/交易標(biāo)題/訂單標(biāo)題/訂單關(guān)鍵字等。
* <p>
* 對于微信支付來說需傳入應(yīng)用市場上的APP名字-實際商品名稱,天天愛消除-游戲充值。
*/
private String subject;
/**
* 訂單生成時間,格式為yyyy-MM-dd HH:mm:ss
*/
private String createTime;
/**
* 支付時長,單位為秒,如果設(shè)置300就是五分鐘,超過五分鐘訂單自動取消
*/
private int expire = 300;
/**
* 訂單金額,單位為分
*/
private int totalAmount;
/**
* 發(fā)起請求的用戶的實際IP
*/
private String ip;
/**
* 支付類型:APP、WEB(微信對應(yīng)公眾號,支付寶對應(yīng)網(wǎng)頁支付)
*/
private String tradeType = "APP";
/**
* 用戶openid,只有在微信公眾號支付時需要
*/
private String openid;
/**
* 附加數(shù)據(jù),會與結(jié)果一并返回
*/
private String attach;
}
OK,上邊的參數(shù)相信就算沒做過支付的同學(xué)也能很清晰直觀的看懂這些信息,都是一些訂單基本信息,下面我們來看退款參數(shù)的定義:
package com.joe.pay.pojo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Size;
/**
* 退款請求
*
* @author joe
* @version 2018.07.05 17:12
*/
@Data
public class RefundRequest {
/**
* 第三方賬單ID,與outTradeNo不能同時為空
*/
private String orderId;
/**
* 商戶系統(tǒng)訂單ID,與orderId不能同時為空
*/
private String outTradeNo;
/**
* 商戶退款單號
* <p>
* 退款支持單筆交易分多次退款,多次退款需要提交原支付訂單的商戶訂單號和設(shè)置不同的退款單號。申請退款總金
* <p>
* 額不能超過訂單金額。 一筆退款失敗后重新提交,請不要更換退款單號,請使用原商戶退款單號。
*/
@NotEmpty(message = "商戶退款單號不能為空")
private String outRefundNo;
/**
* 訂單總金額,單位為分
*/
@Size(min = 1)
private int totalFee;
/**
* 退款金額,不能大于訂單總金額
* <p>
* 注:多次退款總金額不能大于訂單總金額
*/
@Size(min = 1)
private int refundFee;
/**
* 退款原因
* <p>
* 可以為空
*/
private String refundDesc;
}
退款參數(shù)就更簡單了,需要的信息也是相當(dāng)少。有了這些之后我們就可以來看支付測試代碼了:
package com.joe.pay;
import com.joe.pay.pojo.*;
import com.joe.pay.pojo.prop.PayProp;
import com.joe.utils.common.DateUtil;
import com.joe.utils.common.Tools;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* 支付測試
*
* @author joe
* @version 2018.07.02 14:38
*/
public class PayServiceTest {
/**
* 微信配置
*/
private PayProp wxProp;
private PayProp aliProp;
/**
* 微信服務(wù)
*/
private PayService wxPayService;
private PayService aliPayService;
@Before
public void init() {
//配置微信支付,需要將下列參數(shù)替換為自己的參數(shù)
wxProp = PayProp.builder()
.appid("123123123")
.notifyUrl("http://www.baidu.com")
.useWxPay()
.certInput(null)
.key("123123123")
.mchId("123123123123")
.password("123123123123")
.build();
wxPayService = PayServiceFactory.getInstance(wxProp);
String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDEuQvaAad8+PAUVLeh9tqNsWNDCiAXEal4krM0E1"
+ "4oHiUvzOT8Xf5BYZeMmiA+G+Z4iT2dP6bNRBIth7W5COh51v8TDf4dYxqV3Jw7jyQF2K/p74izFXm96yDXz3cMotRdDW3JdcC"
+ "ME2tgrlSjJxN26qPCrHh+OL9Y/yqJGhsAHKlaIYQ4S8F9B3rIPMAv6MbTuHFrFXkwuJqesupTwUqzmPgriy/2Au9ZApnpVCex"
+ "sKIkjMwpmOe3FxaQ9U6271NA9jmzbg7ge5BlfblQL3lIkEQdoqPPKrfLbO3djN1ORn1vhKrIAUhIQAqWKDVdz9dGxrIZckGOe"
+ "8iuUGOs8D4VAgMBAAECggEBAIzyuJcekE5uXjVy7Y9SOw1Ch5hE/PEKao5FLbimF9ROpP42o+pdvgpCTj8jPu7BNsQuMMM2E+"
+ "EGYK/WiFFnHIlYIbIZWHTdyPKO+jGCQaEevAu04BDP1kZI7WMy9m1LTTTOplat06OJVmoS/flXyg5t159ny31EU3UEfgl1dts"
+ "AayODTTRkRUjYXYXSOSDLZjlxSntNS9seklPgEeinc2umrdzJuzciKspK1XLqpCvc+1WA2NlTkoW6Hc9aj61ySCOTkF/3OVjj"
+ "G58jiUMzSeRsG3gq3PEJfhw2FUiJxn04ZRId74tIKrjKV4Np97WdmFEkpTEUTqvSp3AUYm/wJ5ECgYEA9pzaM+dd7vacLbgkA"
+ "e3N8dfyJggSJWm5TpangYIfQBXp+TiLhHFP6lhpCrs/qoxdsmM6LtzEkchvAQOA1kgNgRhm4s1pihKc7aAqK9YxE2tT5Z8XXd"
+ "9SXdLoHXe7GW3Q2ivouMV+J31mhOwSlogR5q0AztXJCl0FH9HHehMyAC8CgYEAzDYJOTOiHm5xjAJ337dtVe1zGUUBwv58B2O"
+ "wZXp129frnOepM+B663aMbrh+IUzVSQWqufGKUkLwjbRmwjrs9Lw4nFYtNGYVp1wnFawVOXy532tthYG5m3i/KcXjIRwnNHew"
+ "9Xh5q9rDc30yPKMps+Uijrp7ktQIRfh+QbOi8PsCgYBQccXz3GsVwjgb6c9FGc9uLmT85vEUZzJdYmNtqYaMHxndhAZuw4+v/"
+ "/rz1zTjazo9MIUQOE+exmT/Tac/Pu24yL73CM5+jafHE9HtzsbfcMlDQ+wZYPm7RUsWIbJUjy/rmxsk+rc2Jn/EqEU/+U7tkk"
+ "2LKs2TpdhAEuwg9BYBXQKBgQCKAZKmJ7DOJBF0b06X0ByBz6DTWQFhyB4F2GcjjWkNE5TVSvHcbz5i1pD9Wo1S79vMJ5pDY2r"
+ "5QOfUvDAd3zi4BGO1s7+FA+BqZCq9yLfnS9VJmg5ABXVsDmQSVPu0KpSMLr9WhP34FjW0XM2QkSvjuVxrXLeaeNTGhLK+sCnT"
+ "9QKBgHfd3hhLWjO4zh99B+PRYFgpnJa9S5E1zzoejZVIJhK5q60KLV5n/HMxuHTGRZxpbfcH4/44d3Yz7ieccmCiPtqxFYUwP"
+ "W0JukNWDL2tOzTSZ5ABAwqorV3bM67mLUSt0O5dL4YtSBJ2J3F6joO1fTZEcUCybO/A5J4wTZDOV1AR";
//配置支付寶支付,需要將下列參數(shù)替換為自己的參數(shù)
aliProp = PayProp.builder()
.appid("123123123")
.notifyUrl("http://www.baidu.com")
.useAliPay()
.publicKey("123123")
.privateKey(privateKey)
.build();
aliPayService = PayServiceFactory.getInstance(aliProp);
}
/**
* 測試微信支付
*/
@Test
public void doWxPay() {
doPay(wxPayService);
}
/**
* 測試支付寶支付
*/
@Test
public void doAliPay() {
doPay(aliPayService);
}
/**
* 測試微信退款
* <p>
* 注意:該測試當(dāng)前通不過,因為沒有提供正確的證書,若想要測試通過則需要在配置文件中提供正確的微信證書和單號
*/
@Test
public void doWxRefund() {
doRefund(wxPayService);
}
/**
* 測試支付寶退款
* <p>
* 注意:該測試當(dāng)前通不過,若想要測試通過則需要提供正確的單號
*/
@Test
public void doAliRefund() {
doRefund(aliPayService);
}
/**
* 校驗響應(yīng)
*
* @param response 響應(yīng)
*/
private void check(SysResponse<? extends BizResponse> response) {
Assert.assertTrue(response.isSuccess());
Assert.assertTrue(response.getData().isSuccess());
}
/**
* 發(fā)起支付請求
*
* @param service service
*/
private void doPay(PayService service) {
SysResponse<PayResponse> response = service.pay(buildPay());
check(response);
}
/**
* 發(fā)起退款請求
*
* @param service service
*/
private void doRefund(PayService service) {
SysResponse<RefundResponse> response = service.refund(buildRefund());
System.out.println("結(jié)果是:" + response);
}
/**
* 構(gòu)建一個支付訂單
*
* @return 支付訂單
*/
private PayRequest buildPay() {
PayRequest payRequest = new PayRequest();
payRequest.setOutTradeNo(Tools.createUUID());
payRequest.setBody("天天愛消除-游戲充值");
payRequest.setSubject("天天愛消除-游戲充值");
payRequest.setCreateTime(DateUtil.getFormatDate(DateUtil.BASE));
payRequest.setTotalAmount(100 * 10);
payRequest.setIp("106.120.141.226");
return payRequest;
}
/**
* 構(gòu)建一個退款訂單
*
* @return 退款訂單
*/
private RefundRequest buildRefund() {
RefundRequest request = new RefundRequest();
request.setOutTradeNo("123456");
request.setOutRefundNo("123456");
request.setTotalFee(100 * 10);
request.setRefundFee(100);
return request;
}
}
感謝各位的閱讀,以上就是“java支付功能怎么實現(xiàn)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對java支付功能怎么實現(xiàn)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
網(wǎng)頁題目:java支付功能怎么實現(xiàn)
文章來源:http://aaarwkj.com/article14/iggsge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、網(wǎng)站策劃、動態(tài)網(wǎng)站、定制開發(fā)、App開發(fā)、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)