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

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

 

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

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

支付宝服务商模式下的支付开发_第1张图片

 

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

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

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

支付宝服务商模式下的支付开发_第2张图片

seller_id:卖方PID

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

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

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

 

三、如何发展商户?

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

支付宝服务商模式下的支付开发_第3张图片

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

支付宝服务商模式下的支付开发_第4张图片

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

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

3、客户授权

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

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

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

支付宝服务商模式下的支付开发_第5张图片

 

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

 

四、业务扩展

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

支付宝服务商模式下的支付开发_第6张图片

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

 

package com.pay.alipay.bo;

import java.util.HashMap;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.fastquery.service.FQuery;
import org.springframework.stereotype.Component;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.domain.ExtendParams;
import com.alipay.api.request.AlipayTradeCreateRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeCreateResponse;
import com.db.PunitExternalDBService;
import com.pay.alipay.util.AlipayConfig;
import com.bean.PayOrder;
import com.bean.Punit;
import com.bean.PunitExternal;
import com.util.Config;

import net.sf.json.JSONObject;

/**
 * 支付宝生成订单
 * 
 * @author libaibai
 * @version 1.0 2018年1月2日
 */
@Component
public class AlipayReqOrder {

	private static final Logger LOG = LogManager.getLogger(AlipayReqOrder.class);

	@Resource
	GetAlipayOpenAuthTokenAppBo getAlipayOpenAuthTokenAppBo;

	private PunitExternalDBService punitExternalDBService = FQuery.getRepository(PunitExternalDBService.class); //

	/**
	 * 生成订单(手机网站支付)
	 * type 订单类型,0临停,1月票
	 */
	public String exe(PayOrder payOrder, String aliAppid, String rsaPrivateKey, String alipayPublicKey, String detail, double chargeMoney,
			String body, String sellerId, int type) {
		String out_trade_no = payOrder.getPayOrderId();

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

		// 封装请求支付信息
		AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
		model.setOutTradeNo(out_trade_no);
		model.setSubject(detail);
		model.setTotalAmount(chargeMoney + "");
		model.setBody(body);
		model.setProductCode(AlipayConfig.PRODUCT_CODE);
		model.setSellerId(sellerId);
		String quitUrl = "https://wx.deliyun.cn/pay?punitId=" + payOrder.getPunitId() + "&plateNum=" + payOrder.getPlateNum();;
		if (type == 1) {
			quitUrl = "https://wx.deliyun.cn/paymonth?punitId=" + payOrder.getPunitId() + "&plateNum=" + payOrder.getPlateNum();
		}
		model.setQuitUrl(quitUrl); // 支付中退出,跳转地址

		// 获取授权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);
		
		// 扩充参数
		ExtendParams extendParams = new ExtendParams();
		extendParams.setSysServiceProviderId(Config.ALIPAY_PID);
		model.setExtendParams(extendParams);

		alipay_request.setBizModel(model);
		// 设置异步通知地址
		alipay_request.setNotifyUrl(AlipayConfig.notify_url);
		// 设置同步地址
		alipay_request.setReturnUrl(AlipayConfig.return_url);
		String formStr = null;
		LOG.info("alipay_下单request=" + JSONObject.fromObject(alipay_request));
		try {
			formStr = client.pageExecute(alipay_request).getBody();
		} catch (AlipayApiException e) {
			LOG.error("alipay_下单失败", e);
			return null;
		}
		LOG.info("alipay_下单成功,formStr=" + formStr);
		return formStr;
	}

	/**
	 * 生成订单(当面付)
	 */
	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 map = new HashMap();
		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 extendParamsMap = new HashMap();
		extendParamsMap.put("sys_service_provider_id", sys_service_provider_id);
		if (!StringUtils.isEmpty(alipayParkingId)) {
			// promo_params参数
			Map promoParamsMap = new HashMap();
			promoParamsMap.put("parking_id", alipayParkingId);
			map.put("promo_params", promoParamsMap);

			// refluxInfo参数
			Map refluxInfoMap = new HashMap();
			Map sceneDataMap = new HashMap();
			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(); // 交易号
	}
}

获取到支付的交易号(tradeNo)后,可以在jsp页面,发起支付宝扣款

官方地址:https://opendocs.alipay.com/open/common/105591

// 支付宝当面付
function tradePay(userId) {
	var iden = $("#iden").val();
	var punitId = $("#punitId").val();
	var chargeMoney = $("#chargeMoney").val();
	var channelId = $("#channelId").val();
	var outTime=$("#outTime").val();
	$.tenetAjax({
		url: PATH + "/punitWS/getAlipayParkOrder",
		data: {'punitId':punitId,'iden':iden,'chargeMoney':chargeMoney, "userId":userId, "channelId":channelId, "outTime":outTime},
		success: function(data){
			if(data.payOrderMap==null){
				$("#iformbtndID").html('支付失败,请返回重新进入');
				return;
			}
			var isPay = data.payOrderMap.isPay;
			var errorMsg = data.payOrderMap.errorMsg;
			if(isPay==null || isPay==0){
				alert(errorMsg);
				$("#iformbtndID").html(''+errorMsg+'');
				return;
			} else if (isPay==2) {
				$("#iformbtndID").html('

支付成功

'); return; } var tradeNo = data.payOrderMap.tradeNo; var payOrderId = data.payOrderMap.payOrderId; if (tradeNo == null || tradeNo == "") { alert("下单失败"); return false; } ready(function() { AlipayJSBridge.call("tradePay", { tradeNO : tradeNo }, function(result) { var data = JSON.stringify(result); data = JSON.parse(data) // 支付成功 if (data.resultCode == 9000) { $("#iformbtndID").html('

支付成功

'); var punitId = $("#punitId").val(); var stayTime = $("#outDelayID").text(); var unitName= $("#unitNameID").text(); var chargeMoney = $("#chargeMoney").val(); window.location.href="paysuc?punitId="+punitId+"&payOrderId="+payOrderId+"&stayTime="+stayTime+"&unitName="+unitName+"&payMoney="+chargeMoney; } else { // 支付失败 $("#iformbtndID").html('支付失败,请返回重新进入'); } }); }); } }); }

 

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

你可能感兴趣的:(java,服务器)