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;
|
}
|
}
|