记录 支付宝口碑--商户会员卡 开发历程

人生第一次写博客,肯定会有多多不足,希望在接下来的日子里自己能坚持下来,持之以恒.

        简单介绍下功能需求,对接商场的CRM会员管理系统和支付宝口碑,实现通过口碑能给商场商圈开通电子会员卡,并通过支付宝消费完成商场积分等操作,一言以蔽之,就是打通口碑和CRM会员功能,积分功能.

        口碑商户会员卡使用场景:        

  1. 商户使用会员卡产品完成会员卡模板创建。
  2. 商户通过线上/线下各种渠道引导用户领取卡,在用户授权的前提下,商户调用接口向用户发会员卡。
  3. 拿到会员卡后,用户到商户消费使用该会员卡,进行消费,可获得会员优惠或者会员积分。
  4. 用户可以在支付宝客户端卡券包里查看到该卡,并看到该卡的会员权益或积分或消费记录。

开发流程:

    ①首先要在蚂蚁金服开放平台办理入驻,如果提示账号存在异常入驻失败建议更换企业账号重新办理.

    ②入驻成功后创建应用,具体官方文档很详细,主要是为了应该审批通过后拿到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:因口碑会员消费同步接口找不到客服也联系不上,口碑开发暂时搁浅

阅读更多

更多精彩内容