支付宝-商家券通知接口服务
配置沙箱环境
-
订阅所需要的消息
-
配置应用网关地址
- 如果外网可以正常访问你的ip就不需要配置。如果是本地测试我们需要借助 内网穿透,可以让外网正常访问我们的ip,设置链接
- 用配置好的ip + 我们的控制器名称即可,控制器名称在下面代码中。
编写接收通知服务代码
定义消息通知接口名称
public interface AlipayNotifyMsgMethod {
// ***************************************** 商家劵 *****************************************
/**
* 商家券创建通知接口
*/
String ALIPAY_MARKETING_ACTIVITY_MESSAGE_CREATED = "alipay.marketing.activity.message.created";
/**
* 商家券修改通知接口
*/
String ALIPAY_MARKETING_ACTIVITY_MESSAGE_MODIFIED = "alipay.marketing.activity.message.modified";
/**
* 商家券停止通知接口
*/
String ALIPAY_MARKETING_ACTIVITY_MESSAGE_STOPPED = "alipay.marketing.activity.message.stopped";
/**
* 商家券领取通知接口
*/
String ALIPAY_MARKETING_ACTIVITY_MESSAGE_RECEIVED = "alipay.marketing.activity.message.received";
/**
* 商家券追加通知接口
*/
String ALIPAY_MARKETING_ACTIVITY_MESSAGE_APPENDED = "alipay.marketing.activity.message.appended";
/**
* 过期优惠券的通知接口
*/
String ALIPAY_MARKETING_ACTIVITY_MESSAGE_EXPIRED = "alipay.marketing.activity.message.expired";
/**
* 过期优惠券的通知接口
*/
String ALIPAY_MARKETING_ACTIVITY_MESSAGE_USED = "alipay.marketing.activity.message.used";
}
接收异步消息方法
@Slf4j
@Api(tags = "支付宝-通知接口服务")
@RestController
@RequestMapping("/alipay/notify")
public class AlipayNotifyController {
/**
* 回调成功
*/
private final static String ALIPAY_CALLBACK_SUCCESS = "success";
/**
* 回调失败
*/
private final static String ALIPAY_CALLBACK_FAIL = "fail";
@ApiOperation(value = "form蚂蚁消息通知接口", httpMethod = "POST")
@PostMapping("/v1/receiveMessage")
public String aliPayNotify(HttpServletRequest request){
// 获取表单请求信息
Map<String, String> mapParams = new HashMap<>(25);
Map<String, String[]> requestParams = request.getParameterMap();
if (requestParams.isEmpty()) {
return ALIPAY_CALLBACK_FAIL;
}
// 解析表单参数
for (String name : requestParams.keySet()) {
String[] values = requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
mapParams.put(name, valueStr);
}
log.warn("【接收通知接口信息】表单信息:{}", JSON.toJSONString(mapParams));
// 消息转发内容-json字符串
String content = mapParams.get("biz_content");
// 解析消息内容
JSONObject jsonObject = JSON.parseObject(content);
// 请求时间戳
String timestamp = mapParams.get("utc_timestamp");
// 请求签名
String sign = mapParams.get("sign");
log.warn("【接口通知接口成功】消息内容:{}, 时间戳:{}, 签名:{}", content, timestamp, sign);
// ********************************************** 蚂蚁通知 **********************************************
// 获取蚂蚁消息通知的接口名
String msgMethod = mapParams.get("msg_method");
log.warn("【异步通知接口为】:{}", msgMethod);
// 过滤非蚂蚁通知
if (StringUtils.isNotEmpty(msgMethod)) {
switch (msgMethod) {
case AlipayNotifyMsgMethod.ALIPAY_MARKETING_ACTIVITY_MESSAGE_CREATED:
// 商家券创建通知接口
log.warn("【支付宝-商家卷-活动创建消息通知接口】:{}", content);
break;
case AlipayNotifyMsgMethod.ALIPAY_MARKETING_ACTIVITY_MESSAGE_RECEIVED:
// 商家券领取通知接口
log.warn("【支付宝-商家卷-商家券领取通知接口】:{}", content);
break;
case AlipayNotifyMsgMethod.ALIPAY_MARKETING_ACTIVITY_MESSAGE_MODIFIED:
// 商家券修改通知接口
log.warn("【支付宝-商家卷-商家券修改通知接口】:{}", content);
break;
case AlipayNotifyMsgMethod.ALIPAY_MARKETING_ACTIVITY_MESSAGE_STOPPED:
// 商家券停止通知接口
log.warn("【支付宝-商家卷-商家券停止通知接口】:{}", content);
break;
case AlipayNotifyMsgMethod.ALIPAY_MARKETING_ACTIVITY_MESSAGE_APPENDED:
// 商家券追加通知接口
log.warn("【支付宝-商家卷-商家券追加通知接口】:{}", content);
break;
case AlipayNotifyMsgMethod.ALIPAY_MARKETING_ACTIVITY_MESSAGE_USED:
// 商家券核销消息接口
log.warn("【支付宝-商家卷-商家券核销通知接口】:{}", content);
break;
case AlipayNotifyMsgMethod.ALIPAY_MARKETING_ACTIVITY_MESSAGE_EXPIRED:
// 商家券过期通知接口
log.warn("【支付宝-商家卷-商家券过期通知接口】:{}", content);
break;
default:
}
}
return ALIPAY_CALLBACK_SUCCESS;
}
}
配置应用网关地址
内网穿透的ip + /alipay/notify/v1/receiveMessage