Browse Source

add:签名生成

lyx 2 weeks ago
parent
commit
3bf6dd4925

+ 23 - 3
alien-store/src/main/java/shop/alien/store/strategy/payment/impl/WeChatPaymentStrategyImpl.java

@@ -18,8 +18,11 @@ import javax.annotation.PostConstruct;
 import java.io.IOException;
 import java.io.UncheckedIOException;
 import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
 import java.security.PrivateKey;
 import java.security.PublicKey;
+import java.security.Signature;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -200,6 +203,22 @@ public class WeChatPaymentStrategyImpl implements PaymentStrategy {
             result.put("appId", appId);
             result.put("mchId", mchId);
             result.put("outTradeNo", request.outTradeNo);
+            // 生成sign
+//            appId
+
+//            随机字符串
+//            prepay_id
+            long timestamp = System.currentTimeMillis() / 1000; // 时间戳
+            String nonce = WXPayUtility.createNonce(32); // 随机字符串
+            String prepayId = response.prepayId;
+            String message = String.format("%s\n%s\n%s\n%s\n", appId, timestamp, nonce, prepayId);
+//            String sign = WXPayUtility.sign(message, sha256withRSA, privateKey);
+            Signature sign = Signature.getInstance("SHA256withRSA");
+            sign.initSign(privateKey);
+            sign.update(message.getBytes(StandardCharsets.UTF_8));
+            result.put("sign", Base64.getEncoder().encodeToString(sign.sign()));
+            result.put("timestamp", String.valueOf(timestamp));
+            result.put("nonce", nonce);
             return R.data(result);
         } catch (WXPayUtility.ApiException e) {
             log.error("微信支付预支付失败,状态码:{},错误信息:{}", e.getErrorCode(), e.getMessage());
@@ -235,7 +254,7 @@ public class WeChatPaymentStrategyImpl implements PaymentStrategy {
         CreateRequest request = new CreateRequest();
         // 微信支付订单号和商户订单号必须二选一,不能同时为空,查询的时候使用的是商户订单号
         //request.transactionId = "1217752501201407033233368018";
-        request.outTradeNo = UniqueRandomNumGenerator.generateUniqueCode(19);
+        request.outTradeNo = params.get("outTradeNo");
         // 退款订单号
         request.outRefundNo = UniqueRandomNumGenerator.generateUniqueCode(19);
         // 退款原因
@@ -246,7 +265,7 @@ public class WeChatPaymentStrategyImpl implements PaymentStrategy {
         //request.fundsAccount = ReqFundsAccount.AVAILABLE;
         // 金额信息
         request.amount = new AmountReq();
-        request.amount.refund = 888L;
+        request.amount.refund = new BigDecimal(params.get("refundAmount")).multiply(new BigDecimal(100)).longValue();
         // 退款出资账户及金额 目前不需要,需要的时候再看
         /*
         request.amount.from = new ArrayList<>();
@@ -257,7 +276,7 @@ public class WeChatPaymentStrategyImpl implements PaymentStrategy {
             request.amount.from.add(fromItem);
         };*/
         // 订单总金额
-        request.amount.total = 888L;
+        request.amount.total = new BigDecimal(params.get("totalAmount")).multiply(new BigDecimal(100)).longValue();
         // 退款币种 目前默认人民币 CNY
         request.amount.currency = "CNY";
         // 退款商品信息 目前不需要,需要的时候再看
@@ -275,6 +294,7 @@ public class WeChatPaymentStrategyImpl implements PaymentStrategy {
         };*/
         try {
             Refund response = refundRun(request);
+            String refundReslut = "";
             // TODO: 请求成功,继续业务逻辑
             System.out.println(response);
         } catch (WXPayUtility.ApiException e) {