
点击官方服务,可以看到当前已经关联的官方场景,如果之前没有关联过,则需要点击关联官方场景
点击关联官方场景,如下图所示

说明:


这一步主要配置三方实现这个接口对外网可以访问的HTTP URL。奇门会请求这个URL,然后获取到结果。如下图所示

需要注意的点:
这里主要是说明三方对于返回结果的json格式需要是什么样的结构。这里举例alibaba.wdk.payment.pay接口为例,要求的返回结构和实际返回的数据如下图所示

用奇门提供的工具来测试自己的代码,以及返回是否是接口要求的格式,使用这个工具可以解耦开需要跟盒马的开发同学一起联调的问题。如下图所示

需要注意的点:

测试完成之后就可以正式对外发布了。发布过程中还需要进行一些签名配置,具体的可以参考奇门官方的文档,点击这里访问。参考API服务签名验证部分。
在正式发布之后需要授权盒马的appkey,允许盒马的appkey来调用你的服务。盒马的appkey是:23773503。操作步骤如下图所示。



如果实现的奇门接口在这里正式环境和测试环境都有了,那么就代表授权成功。否则在实际调用中会出现无法找到路由的错误。
在写代码的时候一定要使用开放平台的sdk来开发,否则其中的签名,请求的方式等各种问题会搞的很花时间。举例如下:
import com.alibaba.fastjson.JSONObject;
import com.qimencloud.api.sceneqimen.request.*;
import com.qimencloud.api.sceneqimen.response.*;
import com.taobao.api.internal.spi.CheckResult;
import com.taobao.api.internal.spi.SpiUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@RequestMapping(value = "/payment_ack", method = {RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public AlibabaWdkPaymentAckResponse paymentAck(HttpServletRequest request){
try{
CheckResult checkResult = SpiUtils.checkSign(request, appSecret);
if (!checkResult.isSuccess()){
AlibabaWdkPaymentAckResponse errResponse = new AlibabaWdkPaymentAckResponse();
/**
* 注意:这里设置的错误信息和错误code,一定要按照奇门接口配置的时候说明的错误返回内容严格设置
* 否则在安全性校验上会不通过。
*/
errResponse.setErrorMessage("Illegal request");
errResponse.setErrorCode("sign-check-failure");
errResponse.setSuccess(false);
return errResponse;
}else{
JSONObject jsonObject = JSONObject.parseObject(checkResult.getRequestBody());
AlibabaWdkPaymentAckRequest.AckParamDO paramDO = jsonObject.getJSONObject("ackParamDO").toJavaObject(AlibabaWdkPaymentAckRequest.AckParamDO.class);
//TODO 实现自己的业务逻辑,然后返回
return doPaymentAck(paramDO);
}
}catch (Exception e){
log.error(e.getMessage(),e);
AlibabaWdkPaymentAckResponse errResponse = new AlibabaWdkPaymentAckResponse();
errResponse.setSuccess(false);
errResponse.setErrorCode(String.valueOf(ErrorCode.PAYMENT_ACK_SYS_ERROR.getCode()));
errResponse.setErrorMessage(e.getMessage());
return errResponse;
}
}
对于示例中的错误设置,参考接口实现配置中接口文档预览中的说明,如下图所示