内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

java支付功能怎么實(shí)現(xiàn)

這篇文章主要講解了“java支付功能怎么實(shí)現(xiàn)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java支付功能怎么實(shí)現(xiàn)”吧!

10年的羅平網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整羅平建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“羅平網(wǎng)站設(shè)計(jì)”,“羅平網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

史上最簡(jiǎn)單的支付SDK

首先我們先看下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);

    /**
     * 申請(qǐng)退款
     *
     * @param request 退款請(qǐng)求
     * @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)站唯一訂單號(hào)
     */
    private String outTradeNo;
    /**
     * 對(duì)一筆交易的描述信息
     */
    private String body;
    /**
     * 商品的標(biāo)題/交易標(biāo)題/訂單標(biāo)題/訂單關(guān)鍵字等。
     * <p>
     * 對(duì)于微信支付來說需傳入應(yīng)用市場(chǎng)上的APP名字-實(shí)際商品名稱,天天愛消除-游戲充值。
     */
    private String subject;
    /**
     * 訂單生成時(shí)間,格式為yyyy-MM-dd HH:mm:ss
     */
    private String createTime;
    /**
     * 支付時(shí)長,單位為秒,如果設(shè)置300就是五分鐘,超過五分鐘訂單自動(dòng)取消
     */
    private int expire = 300;
    /**
     * 訂單金額,單位為分
     */
    private int totalAmount;
    /**
     * 發(fā)起請(qǐng)求的用戶的實(shí)際IP
     */
    private String ip;
    /**
     * 支付類型:APP、WEB(微信對(duì)應(yīng)公眾號(hào),支付寶對(duì)應(yīng)網(wǎng)頁支付)
     */
    private String tradeType = "APP";
    /**
     * 用戶openid,只有在微信公眾號(hào)支付時(shí)需要
     */
    private String openid;
    /**
     * 附加數(shù)據(jù),會(huì)與結(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;

/**
 * 退款請(qǐng)求
 *
 * @author joe
 * @version 2018.07.05 17:12
 */
@Data
public class RefundRequest {
    /**
     * 第三方賬單ID,與outTradeNo不能同時(shí)為空
     */
    private String orderId;
    /**
     * 商戶系統(tǒng)訂單ID,與orderId不能同時(shí)為空
     */
    private String outTradeNo;
    /**
     * 商戶退款單號(hào)
     * <p>
     * 退款支持單筆交易分多次退款,多次退款需要提交原支付訂單的商戶訂單號(hào)和設(shè)置不同的退款單號(hào)。申請(qǐng)退款總金
     * <p>
     * 額不能超過訂單金額。 一筆退款失敗后重新提交,請(qǐng)不要更換退款單號(hào),請(qǐng)使用原商戶退款單號(hào)。
     */
    @NotEmpty(message = "商戶退款單號(hào)不能為空")
    private String outRefundNo;
    /**
     * 訂單總金額,單位為分
     */
    @Size(min = 1)
    private int totalFee;
    /**
     * 退款金額,不能大于訂單總金額
     * <p>
     * 注:多次退款總金額不能大于訂單總金額
     */
    @Size(min = 1)
    private int refundFee;
    /**
     * 退款原因
     * <p>
     * 可以為空
     */
    private String refundDesc;
}
   

退款參數(shù)就更簡(jiǎn)單了,需要的信息也是相當(dāng)少。有了這些之后我們就可以來看支付測(cè)試代碼了:

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;

/**
 * 支付測(cè)試
 *
 * @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);
    }

    /**
     * 測(cè)試微信支付
     */
    @Test
    public void doWxPay() {
        doPay(wxPayService);
    }

    /**
     * 測(cè)試支付寶支付
     */
    @Test
    public void doAliPay() {
        doPay(aliPayService);
    }

    /**
     * 測(cè)試微信退款
     * <p>
     * 注意:該測(cè)試當(dāng)前通不過,因?yàn)闆]有提供正確的證書,若想要測(cè)試通過則需要在配置文件中提供正確的微信證書和單號(hào)
     */
    @Test
    public void doWxRefund() {
        doRefund(wxPayService);
    }

    /**
     * 測(cè)試支付寶退款
     * <p>
     * 注意:該測(cè)試當(dāng)前通不過,若想要測(cè)試通過則需要提供正確的單號(hào)
     */
    @Test
    public void doAliRefund() {
        doRefund(aliPayService);
    }

    /**
     * 校驗(yàn)響應(yīng)
     *
     * @param response 響應(yīng)
     */
    private void check(SysResponse<? extends BizResponse> response) {
        Assert.assertTrue(response.isSuccess());
        Assert.assertTrue(response.getData().isSuccess());
    }

    /**
     * 發(fā)起支付請(qǐng)求
     *
     * @param service service
     */
    private void doPay(PayService service) {
        SysResponse<PayResponse> response = service.pay(buildPay());
        check(response);
    }

    /**
     * 發(fā)起退款請(qǐng)求
     *
     * @param service service
     */
    private void doRefund(PayService service) {
        SysResponse<RefundResponse> response = service.refund(buildRefund());
        System.out.println("結(jié)果是:" + response);
    }

    /**
     * 構(gòu)建一個(gè)支付訂單
     *
     * @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)建一個(gè)退款訂單
     *
     * @return 退款訂單
     */
    private RefundRequest buildRefund() {
        RefundRequest request = new RefundRequest();
        request.setOutTradeNo("123456");
        request.setOutRefundNo("123456");
        request.setTotalFee(100 * 10);
        request.setRefundFee(100);
        return request;
    }
}

感謝各位的閱讀,以上就是“java支付功能怎么實(shí)現(xiàn)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)java支付功能怎么實(shí)現(xiàn)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁題目:java支付功能怎么實(shí)現(xiàn)
文章來源:http://m.rwnh.cn/article14/iggsge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)網(wǎng)站策劃、動(dòng)態(tài)網(wǎng)站定制開發(fā)、App開發(fā)、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
波密县| 五大连池市| 花垣县| 登封市| 沐川县| 鄂尔多斯市| 和顺县| 铜梁县| 齐河县| 孝昌县| 陈巴尔虎旗| 错那县| 南安市| 镶黄旗| 台前县| 延长县| 赤壁市| 九龙县| 冕宁县| 三穗县| 嘉荫县| 三都| 仪征市| 瑞丽市| 和平区| 双牌县| 永靖县| 天等县| 吴堡县| 东乡族自治县| 禹城市| 长泰县| 巴彦县| 大石桥市| 盱眙县| 丰台区| 乌审旗| 黔西| 荃湾区| 青州市| 禹州市|