支付整理

今天整理一下支付流程
有多种支付方式,大体流程大同小异,存在前台同步回调,后台异步回调。
app中对接的支付宝支付,微信支付,云闪付等。
wap站端。
pc端除了微信支付我熟悉其他支付方式略知一二。

wap端,支付方式包括,支付宝(当然微信内被屏蔽,需要复制支付链接重定向),微信(微信端,微信H5支付),快钱,云闪付(非本人开发),通联聚合支付(微信浏览器的微信支付其底层用的是通联微信支付),大额支付(快钱大额支付)。

首先介绍一下大概我的理解
为什么我们系统的微信支付改为通联聚合支付,我的理解是,因我们直接跟微信结算手续费率高,降低成本,如果我们跟通联进行结算费率低,
通联的聚合支付就是,把原先的支付宝、微信和云闪付等平台支付方式进行套壳。其底层还是相关平台支付。

微信支付分为两种,微信内(判断是否是微信浏览器),手机端微信外H5支付。

支付宝手机端:
封装表单提交

form id='alipaysubmit' name='alipaysubmit' action='https://mapi.alipay.com/gateway.do?_input_charset=utf-8' method='post'
input支付宝需要的参数 -->
input订单号或者请求单号(用于同步或异步回调关联订单用)
document.forms['alipaysubmit'].submit();
后端返回拼装好的submit请求,前台直接$("#zfbHtmlText").html(data.data.zfbHtmlText);进而完成提交表单。

微信(微信浏览器内):
重定向授权路径,里面包含redirect_uri回调地址
topay获取微信回调信息。
注意:参数回调需要加解密校验,否则存在漏洞
跳转到接受参数页面,如jsp页面。
jsp中内嵌javascript

  	function callpay(){
		try{
			 WeixinJSBridge.invoke('getBrandWCPayRequest',{
		  		 "appId" : $("#appid").val(),
		  		 "timeStamp" : $("#timeStamp").val(), 
		  		 "nonceStr" : $("#nonceStr").val(), 
		  		 "package" : $("#package").val(),
		  		 "signType" : "MD5", 
		  		 "paySign" : $("#sign").val() 
	   			  },function(res){
	   				  
	   				if (res.err_msg == "get_brand_wcpay_request:ok") { 
					} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
					}
				})
  			 
  		 } catch (e) {
  			 alert(e);
  		 }
	}
       
  	$(document).ready(function() {
  		if (typeof(WeixinJSBridge) == "undefined"){
           if( document.addEventListener ){
               document.addEventListener('WeixinJSBridgeReady', callpay, false);
           }else if (document.attachEvent){
               document.attachEvent('WeixinJSBridgeReady', callpay); 
               document.attachEvent('onWeixinJSBridgeReady', callpay);
           }
        }else{
        	callpay();
        }
  	});

微信支付(H5):
重定向到支付平台,完成支付后,同步回调合作平台。

快钱支付:
重定向到支付平台,可选择银行卡,或者信用卡支付,可设置信用卡不可支付参数。
完成支付后,同步回调合作平台。

通联微信集合支付,返回payinfo参数,直接作为微信内嵌函数参数如:

WeixinJSBridge.invoke('getBrandWCPayRequest',payinfo,function(res){
	   				if (res.err_msg == "get_brand_wcpay_request:ok") { 
					} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
					} else {
					}
				})


优化支付回调接口,可以使用AOP,在回调方法上增加回调日志(消息队列日志的数据库存储)。

原文地址:https://www.cnblogs.com/stubborn-dude/p/14166859.html