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

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

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

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

好了,那么对接完当面付之后,如何替商户发起支付呢??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%,因为支付宝的政策和微信的政策是一样的,我就不具体说明了,你懂的。。。。

四、业务扩展

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

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

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);@ResourceGetAlipayOpenAuthTokenAppBo 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); // 支付中退出,跳转地址// 获取授权tokenString 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<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); // 买家pidmap.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) {// 获取授权tokenString 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('<a class="btna bg1">支付失败,请返回重新进入</a>');return;}var isPay = data.payOrderMap.isPay;var errorMsg = data.payOrderMap.errorMsg;if(isPay==null || isPay==0){alert(errorMsg);$("#iformbtndID").html('<a class="btna bg1">'+errorMsg+'</a>');return;} else if (isPay==2) {$("#iformbtndID").html('<p>支付成功</p>');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('<p>支付成功</p>');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('<a class="btna bg1">支付失败,请返回重新进入</a>');}});});}});
}

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

支付宝服务商模式下的支付开发相关推荐

  1. 微信支付服务商模式下的支付-特约商户-----亲试有效

    微信小程序 服务商模式下的子商户 统一下单请求中的参数: 1. appid:服务商的appid 2. mch_id:服务商商户号 appid和mch_id 都换成服务商的appId 和 服务商的商户号 ...

  2. 调用支付jsapi缺少参数appid_服务商模式下的小程序微信支付

    最近,要做一个小程序商城的项目,需要在小程序中用到分账功能,也就是顾客购买商品支付的钱要给各个店铺,这就需要用到服务商模式. 在谈服务商模式下小程序微信支付之前,我们先要有一个服务商的商户号,这个商户 ...

  3. 服务商模式下微信小程序支付时,一直报“支付验证签名失败”错误的解决办法

    在写小程序支付的时候,我是以服务商模式发起的支付,统一下单接口是调用成功的,但是在小程序调起支付的时候就报"支付验证签名失败"的错误. 主要有三个原因: 1.第二次签名用到的tim ...

  4. 微信支付---服务商模式--付款码支付(PHP)

    微信支付-服务商模式–付款码支付(PHP) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 微信文档地址 https://pay ...

  5. 服务商模式支付签名验证失败php,服务商模式小程序支付签名失败,请求管理员和大牛解决!!!...

    服务商模式小程序支付签名失败,请求管理员和大牛解决!!! 根据服务商模式的小程序支付文档: ①商户server调用支付统一下单: 统一下单成功返回预付单: order appid"wx11a ...

  6. 关于支付宝服务商模式的刷卡支付没有分润的问题

    我申请支付宝服务商后,找了个实体店签约,并开通了当面付,但是测试刷卡支付时,虽然支付宝能成功扣款,暂时在支付宝的服务商的账单管理中看不到分润,我测试了12元.应该有几分钱的分润才对,而且交易额显示也是 ...

  7. 支付宝H5 与网页端支付开发

    在日常生活中,我们基本上都是进行微信与支付宝的支付方式尽心支付,这种方式确实大大便利了我们的生活,那么如何在我们的产品中进行微信与支付宝支付的植入开发呢? 我们先进行支付宝的H5与网页端支付开发,这里 ...

  8. WearOS Offload模式下的表盘开发

    WearOS手表offload模式下的表盘渲染,是通过BG绘制的. 一.表盘进入offload的条件是手表处于微光模式且表盘是Decomposable的. 为了满足上述条件,需要表盘开发中做如下配置: ...

  9. 支付宝服务商模式支付

    需求是加盟商或者门店钱直接到加盟商门店账号 1 在支付宝开放平台创建弟三方应用并帮商家创建商户 开放平台欢迎登录支付宝,支付宝-全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网 ...

  10. C#支付宝当面付扫码支付开发,包括demo代码的修改和蚂蚁金服开发平台的配置

    支付宝开发前配置: 第一步登陆蚂蚁金服开放平台服:支付宝扫码登陆 登录之后看到一下界面,找到自主研发选项,点击开始入驻 配置自己的个人信息: 到此为止我们所有应该做的配置基本上就完成了,但是我们要注意 ...

最新文章

  1. Python中判断字典的键或值在不在字典中 默认是判断的依据是条目在不在字典的键集合中
  2. zz 标 题: 求weka JVM outofMemory问题的解决方案【已解决】
  3. 关于winodows下编程c++遇到的引用文件路径问题
  4. Higher level thinking
  5. u 20ubuntu 安装 postfix_汽车天线安装指南
  6. Android反编译与加密(代码混淆)
  7. CH579 SPI WS2812B
  8. 菲尔茨奖得主陶哲轩:瓜分数学成就 没有益处
  9. Vue Resource
  10. win10重启不能上网(只能QQ上网,打不开浏览器网页)
  11. JavaScript函数式编程入门-计算器应用
  12. mac 上最好用的SSH终端FinalShell
  13. 网易云信技术创新,助力网易云音乐社交玩法升级
  14. Go语言IDE GoLand的BUG
  15. 【Pygame实战】妈耶~这款经典的《俄罗斯方块儿》竟这么厉害......
  16. 什么是虚拟主机?虚拟主机的作用有哪些?
  17. 无人机巡检智能一体化解决方案
  18. radosgw-admin命令详细参数
  19. php 类型提示,PHP中的类型提示(type hinting)功能介绍
  20. 交叉引用跳转不到后面_参考文献的作用与正确引用避免查重

热门文章

  1. 小程序跳转到其他小程序
  2. Android 端发送邮件
  3. 写点什么好呢2? 钱、事业、婚姻、人生意义
  4. word下载后为php_php生成word并下载代码实例
  5. oracle去空格去不掉,oracle去掉空格
  6. 虚拟化技术原理(CPU、内存、IO)
  7. IntelliJ IDEA 2016.2 注册破解激活教程
  8. 分布式计算 网格计算 并行计算 云计算
  9. nodejs高速公路收费管理系统vue
  10. rank函数在c语言怎么用,如何利用RANK函数排名?RANK函数怎么使用?