| | |
| | | || WxPayNotifyEventTypeEnum.REFUND_ABNORMAL.getCode().equals(eventType) |
| | | || WxPayNotifyEventTypeEnum.REFUND_CLOSED.getCode().equals(eventType)) { |
| | | |
| | | RefundNotifyResult result = wxService.getEcommerceService().parseRefundNotifyResult(notifyData, signatureHeader); |
| | | RefundNotifyResult result = this.parseRefundNotifyResult(notifyData, signatureHeader); |
| | | orderService.orderRefundBack(result); |
| | | resultType = 2; |
| | | resultMessage = GSON.toJson(result); |
| | |
| | | } |
| | | } |
| | | |
| | | private RefundNotifyResult parseRefundNotifyResult(String notifyData, SignatureHeader header) throws WxPayException { |
| | | |
| | | NotifyResponse response = GSON.fromJson(notifyData, NotifyResponse.class); |
| | | NotifyResponse.Resource resource = response.getResource(); |
| | | String cipherText = resource.getCiphertext(); |
| | | String associatedData = resource.getAssociatedData(); |
| | | String nonce = resource.getNonce(); |
| | | String apiV3Key = this.wxService.getConfig().getApiV3Key(); |
| | | try { |
| | | String result = AesUtils.decryptToString(associatedData, nonce, cipherText, apiV3Key); |
| | | RefundNotifyResult notifyResult = GSON.fromJson(result, RefundNotifyResult.class); |
| | | notifyResult.setRawData(response); |
| | | return notifyResult; |
| | | } catch (GeneralSecurityException | IOException e) { |
| | | throw new WxPayException("解析报文异常!", e); |
| | | } |
| | | } |
| | | |
| | | private boolean verifyNotifySign(SignatureHeader header, String data) throws WxPayException { |
| | | String beforeSign = String.format("%s\n%s\n%s\n", |
| | | header.getTimeStamp(), |