人生第一次写博客,肯定会有多多不足,希望在接下来的日子里自己能坚持下来,持之以恒.
简单介绍下功能需求,对接商场的CRM会员管理系统和支付宝口碑,实现通过口碑能给商场商圈开通电子会员卡,并通过支付宝消费完成商场积分等操作,一言以蔽之,就是打通口碑和CRM会员功能,积分功能.
口碑商户会员卡使用场景:
开发流程:
①首先要在蚂蚁金服开放平台办理入驻,如果提示账号存在异常入驻失败建议更换企业账号重新办理.
②入驻成功后创建应用,具体官方文档很详细,主要是为了应该审批通过后拿到appid和支付宝公钥进而继续接下来的开发工作,如果是为对接其他项目建议创建应用时候选择类型为第三方应用
③下载密钥生成工具生成公钥和私钥
④总体开发逻辑---
我作为ISV(第三方开发)开发对接口碑,相当于我是中间商,为甲方开发打通口碑平台,所以我需要甲方商圈的数据作为支持,这就涉及到了授权模式,授权链接为如下固定链接:
https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=2018041802578364&redirect_uri=http://wxqhdyjy.cn/koubei/interfaceController/alipayMarketCardTemplateCallBack
参数说明:
app_id 为你在口碑开放平台注册的应用的id;
redirect_uri 为商户确认授权后的回调地址,具体回调参数接收处理需要根据业务自己实现,并且这个回调地址是注册应用 时配置的地址 ,应保持一致.授权成功后会拿到auth_code用来换取access_token,token信息在后续开发中作为ISV调用接口时会用到
0,图片上传获得创建模板所需要的图片id
1,创建会员卡模板
2,会员卡开卡表单模板配置
3,商圈id和模板id绑定(需由口碑PD完成)
4,商圈交易信息接口订阅
5,生成会员开卡授权链接
6,会员开卡
7,会员交易信息处理(积分同步)
官方API文档地址:https://docs.open.alipay.com/251/105731
0,图片上传
官方已经封装好操作对象,不需要我们具体知道底层实现细节,如果需要详细了解可看jar包源码
/**
* 图片上传接口
*/
public static void alipayOfflineMaterialImageUpload() {
AlipayOfflineMaterialImageUploadRequest alipayRequest = new AlipayOfflineMaterialImageUploadRequest();
alipayRequest.setImageType("jpg"); //图片类型,当前支持bmp,png,jpeg,jpg,gif 5个类型
alipayRequest.setImageName("图片名称");
FileItem ImageContent = new FileItem("E:/timg (1).jpg"); //图片文件路径,Windows请填写绝对路径,不支持相对路径;Linux支持相对路径
alipayRequest.setImageContent(ImageContent);
try {
AlipayOfflineMaterialImageUploadResponse alipayResponse = alipayClient.execute(alipayRequest);
String imageId = alipayResponse.getImageId(); //获取图片资源ID
System.out.println(imageId);
} catch (Exception e) {
e.printStackTrace();
}
}
1,创建会员卡模板
创建会员卡模板之前如果是ISV的话,需要商圈给你授权.授权链接如下:
https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=2018041802578364&redirect_uri=http://wxqhdyjy.cn/koubei/interfaceController/alipayMarketCardTemplateCallBack
参数说明:
app_id 为你在口碑开放平台注册的应用的id;
redirect_uri 为商户确认授权后的回调地址,具体回调参数接收处理需要根据业务自己实现,并且这个回调地址是注册应用 时配置的地址 ,应保持一致.授权成功后会拿到auth_code用来换取access_token,token信息在后续开发中作为ISV调用接口时会用到
/**
* 支付宝授权回调接口
* 参数说明:
* request_id 参数使用“会员卡表单信息查询接口”从支付宝查询用户此次领取会员卡表单提交的信息,用户后续会员卡开卡
* out_string : 配置会员模板时配置的参数,现作marketNo
* template_id : 模板id
* auth_code : auth_code作为换取access_token的票据,每次用户授权完成,回调地址中的auth_code将不一样,auth_code只能使用一次,一天未被使用自动过期
* app_auth_code : 商户授权,用来换取app_auth_token
*/
@RequestMapping(value="/interfaceController/alipayMarketCardTemplateCallBack")
public void alipaiMarketCardTemplateCallBack(HttpServletResponse resp,String auth_code,String templateId,String marketNo,
String app_auth_code,String app_id) {
if(StringUtils.isNotBlank(app_auth_code)) {
AlipayOpenAuthTokenAppRequest request = new AlipayOpenAuthTokenAppRequest();
AlipayOpenAuthTokenAppModel model = new AlipayOpenAuthTokenAppModel();
model.setGrantType("authorization_code");
model.setCode(app_auth_code);
request.setBizModel(model);
try {
AlipayOpenAuthTokenAppResponse response = alipayClient.execute(request);
String code = response.getCode();
if("10000".equals(code)) {
JSONObject json_body = JSONObject.parseObject(response.getBody());
JSONObject json_infos = JSONObject.parseObject(json_body.get("alipay_open_auth_token_app_response")+"");
// token = json_infos.getString("app_auth_token");
if(StringUtils.isNotBlank(token)) {//根据app_auth_token查询商户授权信息
AlipayOpenAuthTokenAppQueryRequest request_query = new AlipayOpenAuthTokenAppQueryRequest();
AlipayOpenAuthTokenAppQueryModel model_query = new AlipayOpenAuthTokenAppQueryModel();
model_query.setAppAuthToken(token);
request_query.setBizModel(model_query);
AlipayOpenAuthTokenAppQueryResponse response_query = alipayClient.execute(request_query);
JSONObject json_body_token = JSONObject.parseObject(response_query.getBody());
System.out.println("获取商户授权信息成功!");
System.out.println(json_body_token);
}
}else {
System.out.println("获取商户授权信息失败");
}
return;
} catch (Exception e) {
e.printStackTrace();
return;
}
}
List<String> userId_token = access_token(auth_code);
AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
try {
if(userId_token!=null&&userId_token.size()==2) {
AlipayUserInfoShareResponse response = alipayClient.execute(request,userId_token.get(1));
JSONObject json_body = JSONObject.parseObject(response.getBody());
JSONObject json_infos = JSONObject.parseObject(json_body.get("alipay_user_info_share_response")+"");
json_infos.put("marketNo", marketNo);
String redirectUrl = alipayMarketingCardOpenRequest(userId_token, templateId, json_infos);
resp.sendRedirect(redirectUrl);
}else {
logger.error("客户id或者token信息不全!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取支付宝AccessToken
* @param auth_code
* @return
*/
public static List<String> access_token(String auth_code){
List<String> msg = new ArrayList<>();
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setCode(auth_code);
request.setGrantType("authorization_code");
try {
AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(request);
msg.add(oauthTokenResponse.getUserId());
msg.add(oauthTokenResponse.getAccessToken());
return msg;
} catch (AlipayApiException e) {
//处理异常
e.printStackTrace();
return msg;
}
}
首先商场创建自己的会员卡模板,设置好模板相应配置,设置成功支付宝会返回一个领卡链接,这个链接可设置在商场口碑中或者门店中生成二维码,通过该链接点击效果如下
客户点击领卡后,支付宝回调领卡页面设置的回调地址传回会员参数等信息,进而为该会员开卡,客户获得会员卡后可查询卡详细信息,修改卡部分信息,删除会员卡信息,当会员通过支付宝消费时同步消费记录,进行信息的同步.
哎,自己理了半天,发现支付宝已经给写好流程了.真是贴心啊,粘贴一下下
我是如此膜拜支付宝的贴心服务~
PS:因口碑会员消费同步接口找不到客服也联系不上,口碑开发暂时搁浅