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