支付宝服务商模式下的支付开发

微信的服务商模式开发,文档有很明确的说明,也有详细的开发文档,以及操作步骤。其实支付宝也是支付服务商模式的,只是比较影藏,今天在这里梳理一下。

 

一、如何选择支付类型??

在实现支付宝支付的时候,我们要先选择一种支付方式,这里和微信是一样的。

 一般的作为后台开发者,我们首选手机网站支付,因为这个不仅是H5页面可以发起支付,以后也可以嵌套在APP里面,这样APP就不用二次开发了。

但是坑来了,当我们打开当面付的api以后,就会发现问题了。

 

如上图:

手机网站支付是不支持第三方调用的,但是当面付可以。换句话说,就是手机网站支付不支持服务商,当面付才支持服务商模式。

好长时间才发现,这个坑。

 

二、如何替商户发起支付??

好了,那么对接完当面付之后,如何替商户发起支付呢??ok,看文档

https://opendocs.alipay.com/apis/api_1/alipay.trade.pay

seller_id:卖方PID

如果该值为空,则默认为商户签约账号对应的支付宝用户ID

这是很含蓄的表达:意思就是如果为空,默认就是服务商的PID,不为空,才是商户的

找到途径之后,我们就只需要找到满足条件的商户PID,就可以完成支付了。

 

三、如何发展商户?

1、登录网址:https://p.alipay.com/workspace/home

2、运营中心-->商家签约管理

在这里帮你的商户,签约当面付,这里签约的时候,费率一定要填写0.6%,因为这里有惊喜哦^-^

签约成功之后,客户会收到签约确认邮件,登录确认就好。

3、客户授权

官方文档:https://opendocs.alipay.com/open/20160728150111277227/intro

这里一定要注意:授权支付宝账号和之前签约的支付宝账号一定要是同一个

授权成功之后,在会在“我的商家”里面显示出来。

 

好了,准备工作到这里,基本上就可以实现服务商模式支付。签约的费率为什么要选择0.6%,因为支付宝的政策和微信的政策是一样的,我就不具体说明了,你懂的。。。。

 

四、业务扩展

聊点题话外,支付宝在这里还预留了业务扩展参数,这个可以根据自己和支付宝合作,而具体判断。

 这里附上代码片段,有需要的同学,可以参考。

	public String exe(PayOrder payOrder, String aliAppid, String rsaPrivateKey, String alipayPublicKey, String detail, double chargeMoney,
			String body, String sellerId, String userId, int isSpAliPay, Punit punit) {
		String out_trade_no = payOrder.getPayOrderId();

		// 调用支付宝sdk,生成订单
		AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, aliAppid, rsaPrivateKey, AlipayConfig.FORMAT, AlipayConfig.CHARSET,
				alipayPublicKey, AlipayConfig.SIGNTYPE);
		AlipayTradeCreateRequest alipay_request = new AlipayTradeCreateRequest();

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("out_trade_no", out_trade_no);
		map.put("subject", detail);
		map.put("total_amount", chargeMoney);
		map.put("body", body);
		map.put("seller_id", sellerId);
		map.put("buyer_id", userId); // 买家pid
		map.put("timeout_express", "10m"); // 最晚支付时间10分钟

		// 德立云参数
		 String sys_service_provider_id = Config.ALIPAY_PID;
		 String alipayParkingId = punit.getAlipayParkingId(); // 支付宝停车场

		// 云纵参数
		try {
			PunitExternal punitExternal = punitExternalDBService.findByPunitId(payOrder.getPunitId());
			if (punitExternal != null && !StringUtils.isEmpty(punitExternal.getParkingId())) {
				sys_service_provider_id = Config.YUNZOU_PID;
				alipayParkingId = punitExternal.getParkingId(); // 支付宝停车场
			}
		} catch (Exception e1) {
			LOG.error("获取停车场合作参数失败", e1);
		}

		// extendParams参数
		Map<String, Object> extendParamsMap = new HashMap<String, Object>();
		extendParamsMap.put("sys_service_provider_id", sys_service_provider_id);
		if (!StringUtils.isEmpty(alipayParkingId)) {
			// promo_params参数
			Map<String, Object> promoParamsMap = new HashMap<String, Object>();
			promoParamsMap.put("parking_id", alipayParkingId);
			map.put("promo_params", promoParamsMap);

			// refluxInfo参数
			Map<String, Object> refluxInfoMap = new HashMap<String, Object>();
			Map<String, Object> sceneDataMap = new HashMap<String, Object>();
			refluxInfoMap.put("scene_code", "parking_fee_order");
			refluxInfoMap.put("channel", "common_park_provider");
			sceneDataMap.put("license_plate", payOrder.getPlateNum());
			sceneDataMap.put("start_time", payOrder.getInTime());
			sceneDataMap.put("parking_lot_id", alipayParkingId);
			sceneDataMap.put("parkling_lot_name", punit.getUnitName());
			sceneDataMap.put("city_code", punit.getCity());
			refluxInfoMap.put("scene_data", sceneDataMap);
			String refluxInfoString = JSONObject.fromObject(refluxInfoMap).toString();
			extendParamsMap.put("industry_reflux_info", refluxInfoString);
		}
		map.put("extend_params", extendParamsMap);

		// 必须传递,生成订单之后,用H5调起支付宝
		if (isSpAliPay == 1) {
			// 获取授权token
			String authToken = getAlipayOpenAuthTokenAppBo.getAuthToken(sellerId);
			if (StringUtils.isEmpty(authToken)) {
				LOG.error("alipay_支付宝获取authToken失败,sellerId=" + sellerId);
				return null;
			}
			alipay_request.putOtherTextParam("app_auth_token", authToken);
		}
		alipay_request.setBizContent(JSONObject.fromObject(map).toString());

		// 设置异步通知地址
		alipay_request.setNotifyUrl(AlipayConfig.notify_url);
		// 设置同步地址
		alipay_request.setReturnUrl(AlipayConfig.return_url);

		AlipayTradeCreateResponse response = null;
		try {
			response = client.execute(alipay_request);
		} catch (AlipayApiException e) {
			LOG.error("alipay_支付宝下单失败");
		}
		LOG.info("alipay_下单成功,response=" + JSONObject.fromObject(response).toString());

		// 返回参数jsapi 需要的参数
		return response.getTradeNo(); // 交易号
	}

JSAPI支付地址:https://opendocs.alipay.com/open/common/105591

好了,到这里支付宝服务商模式支付,已经完成了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章