shikeyin
2024-01-11 65da8373531677b1c37a98f53eaa30c892f35e5a
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
package com.iplatform.pay.notify;
 
import com.iplatform.pay.BasePayApi;
import com.iplatform.pay.Constants;
import com.walker.infrastructure.utils.JsonUtils;
import com.walker.infrastructure.utils.StringUtils;
import com.walker.pay.allinpaycloud.DefaultPayEngineProvider;
import com.walker.pay.allinpaycloud.RequestNotify;
import com.walker.pay.allinpaycloud.pojo.ResponseSignAcctNotify;
import com.walker.pay.allinpaycloud.util.TextUtils;
import com.walker.pay.exception.NotifyException;
import com.walker.web.ResponseValue;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
/**
 * 通商云通知进入接口。
 * @author 时克英
 * @date 2023-02-25
 */
@RestController
@RequestMapping("/pay/notify/allinpayCloud")
@ConditionalOnClass({DefaultPayEngineProvider.class})
public class AllinpayCloudApi extends BasePayApi {
 
    /**
     * 提现签约通知(接收)
     * @param raw
     * @return
     * @date 2023-02-27
     */
    @PostMapping("/signAcctNotify")
    public ResponseValue signAcctNotify(RequestNotify raw){
        logger.debug(raw.toString());
        if(StringUtils.isEmpty(raw.getBizContent())){
            throw new IllegalArgumentException("通商云'提现签约'通知,未接收到 bizContent 业务数据:" + raw, null);
        }
 
        String decodeBizContent = TextUtils.decodeFormUrlParameter(raw.getBizContent());
        logger.debug(decodeBizContent);
 
        try {
            ResponseSignAcctNotify responseSignAcctNotify = JsonUtils.jsonStringToObject(decodeBizContent, ResponseSignAcctNotify.class);
            if(StringUtils.isNotEmpty(responseSignAcctNotify.getResult())
                    && responseSignAcctNotify.getResult().equals(com.walker.pay.allinpaycloud.Constants.SUB_CODE_OK)){
                logger.info("提现签约成功,这里处理业务状态更新: " + responseSignAcctNotify.getAcctProtocolNo());
            }
        } catch (Exception e) {
            throw new RuntimeException("ResponseSignAcctNotify转换对象错误, bizContent=" + decodeBizContent, e);
        }
 
        return ResponseValue.success();
    }
 
    /**
     * 订单支付通知(接收)
     * @param raw
     * @return
     * @date 2023-02-26
     */
    @PostMapping("/orderNotify")
    public ResponseValue orderPayNotify(RequestNotify raw){
        logger.debug(raw.toString());
        if(StringUtils.isEmpty(raw.getBizContent())){
//            logger.error("通商云支付通知,未接收到 bizContent 业务数据: {}", raw);
            throw new IllegalArgumentException("通商云支付通知,未接收到 bizContent 业务数据:" + raw, null);
        }
 
        // 通过支付管理器的通知方法调用。
        try {
            String error = this.getPayEngineManager().notifyOrder(Constants.PAY_DEFINITION_ID_ALLINPAY_CLOUD, raw);
            if(StringUtils.isNotEmpty(error)){
                throw new RuntimeException("支付通知引擎返回错误:" + error, null);
            }
        } catch (NotifyException e) {
            throw new RuntimeException("通商云支付结果通知异常:" + e.getMessage() + ", raw = " + raw , e);
        }
 
        return ResponseValue.success();
    }
 
}