医院废弃物信息化管理平台
“mitao”
2025-12-24 3763145f34d7706923d55edc32f5cfbc8bc08b92
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package cn.besteam.modules.system.util;
 
import cn.besteam.modules.system.util.vo.PaymentOrderVO;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import nuonuo.open.sdk.NNOpenSDK;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
 
import java.util.UUID;
 
/**
* 诺诺支付工具类
* @author pzb
* @Date 2022/7/19 19:50
*/
@Component
public class NouNouPayUtil {
 
    @Value("${nuonuo.appKey}")
    private String appKey;
    @Value("${nuonuo.appSecret}")
    private String appSecret;
    @Value("${nuonuo.taxnum}")
    private String taxnum ;//税号
    @Value("${nuonuo.token}")
    private String token; // 访问令牌
 
 
    /**
     * 下单获取支付连接
     *  1、商户通过【支付即开票下单接口】获取支付链接,生成二维码 2、消费者用支付宝或者微信扫码,或者点击该支付链接,进入收款页面(诺诺页面) 3、支付完成后,如果该商户具备诺诺发票资质,可以进入开票流程 (诺诺页面) 4、再次扫码,可以查看当前的支付以及开票情况
     * @param taxNo             商户税号,沙箱环境使用税号:339901999999142
     * @param customerOrderNo   商户订单号
     * @param amount            支付金额(单位为元,保留小数点后两位
     * @param subject           交易商品
     * @param sellerNote        商户备注
     * @param callbackUrl       传参回调地址,但若回调方式配置为2,则该字段必传
     * @return
     */
    public String paymentToOrders(String taxNo, String customerOrderNo, Double amount, String subject, String sellerNote, String callbackUrl){
        NNOpenSDK sdk = NNOpenSDK.getIntance();
        String method = "nuonuo.polymerization.paymentToOrders"; // API方法名
        String content = "{" +
                "\"amount\":\"" + amount + "\"," +
                "\"subject\":\"" + subject + "\"," +
                "\"sellerNote\":\"" + sellerNote + "\"," +
                "\"billingType\":\"1\"," +
                "\"appKey\":\"" + appKey + "\"," +
                "\"callbackMethod\":\"2\"," +
                "\"callbackUrl\":\"" + callbackUrl + "\"," +
                "\"taxNo\":\"" + taxNo + "\"," +
                "\"customerOrderNo\":\"" + customerOrderNo + "\"" +
                "}";
        String url = "https://sdk.nuonuo.com/open/v1/services"; // SDK请求地址
        String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
        String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
        System.err.println(result);
        JSONObject jsonObject = JSON.parseObject(result);
        String code = jsonObject.getString("code");
        if("JH200".equals(code)){
            return jsonObject.getJSONObject("result").getString("payUtl");
        }
        System.err.println(jsonObject.getString("describe"));
        return "";
    }
 
 
    /**
     * 查询订单支付状态
     * @param orderNo               诺通付支付订单号(两个订单号必须传一个)
     * @param customerOrderNo       商户订单号(两个订单号必须传一个)
     * @param taxNo                 商户税号
     * @return 支付状态(0--待支付 1--已支付 2--支付失败 3--关闭 4--退款中 5--退款成功 6--退款失败)
     */
    public PaymentOrderVO queryPaymentOrder(String orderNo, String customerOrderNo, String taxNo){
        NNOpenSDK sdk = NNOpenSDK.getIntance();
        String method = "nuonuo.polymerization.queryPaymentOrder"; // API方法名
        String content = "{\"orderNo\":\"" + orderNo + "\",\"taxNo\":\"" + taxNo +"\",\"customerOrderNo\":\"" + customerOrderNo + "\"}";
        String url = "https://sdk.nuonuo.com/open/v1/services"; // SDK请求地址
        String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
        String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
        System.out.println(result);
        JSONObject jsonObject = JSON.parseObject(result);
        String code = jsonObject.getString("code");
        if("JH200".equals(code)){
            PaymentOrderVO paymentOrderVO = jsonObject.getObject("result", PaymentOrderVO.class);
            return paymentOrderVO;
        }
        System.err.println(jsonObject.getString("describe"));
        return null;
    }
 
 
    /**
     * 关闭订单
     * @param orderNo
     * @param customerOrderNo
     * @param taxNo
     * @return
     */
    public Boolean closeOrder(String orderNo, String customerOrderNo, String taxNo){
        NNOpenSDK sdk = NNOpenSDK.getIntance();
        String method = "nuonuo.AggregatePay.CloseOrder"; // API方法名
        String content = "{\"orderNo\": \"" + orderNo + "\",\"taxNo\": \"" + taxNo + "\",\"customerOrderNo\": \"" + customerOrderNo + "\"}";
        String url = "https://sdk.nuonuo.com/open/v1/services"; // SDK请求地址
        String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
        String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
        System.out.println(result);
        JSONObject jsonObject = JSON.parseObject(result);
        String code = jsonObject.getString("code");
        if("JH200".equals(code)){
            return true;
        }
        System.err.println(jsonObject.getString("describe"));
        return false;
    }
 
 
    /**
     * 获取开票路径
     * @param orderNo           诺通付支付订单号(两个订单号必须传一个)
     * @param customerOrderNo   商户订单号(两个订单号必须传一个)
     * @param taxNo             商户税号
     * @return
     */
    public String getInvoiceLinks(String orderNo, String customerOrderNo, String taxNo){
        NNOpenSDK sdk = NNOpenSDK.getIntance();
        String method = "nuonuo.polymerization.getInvoiceLinks"; // API方法名
        String content = "{\"orderNo\":\"" + orderNo + "\",\"taxNo\":\"" + taxNo + "\",\"customerOrderNo\":\"" + customerOrderNo + "\"}";
        String url = "https://sdk.nuonuo.com/open/v1/services"; // SDK请求地址
        String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
        String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
        System.out.println(result);
        JSONObject jsonObject = JSON.parseObject(result);
        String code = jsonObject.getString("code");
        if("JH200".equals(code)){
            return jsonObject.getJSONObject("result").getString("invoiceUrl");
        }
        System.err.println(jsonObject.getString("describe"));
        return null;
    }
}