第三方支付(并不是阿里云和微信)!
大概是第三方接入阿里云,然后我在接入第三方支付!
!本人很菜,不接受反驳!
biubiubiu~
(づ ̄3 ̄)づ╭❤~
先写一下开发步骤吧!
- 上级领导给我一份第三方支付的文档!
- 我们先解压文档,并且打开有用的文档!(手动滑稽!!)
- 阅读文档的时候我们需要知道一些简单的信息!
3.1第三方使用什么方式提交数据?(POST/GET).
3.2我们需要知道我们之间的加密方式是什么?(RSA/MD5).
3.3查看签名的加密方式(RSA/MD5).注意MD5加密是区分大小写的!!
3.4我们的请求报文方式是什么?(POST/GET).
3.5说道这里基本就可以开始搞了!
怎么搞?这让我有点头痛!!
现在跟随我的大脑一起幻想,现在页面上有一个框,框里面有一些数字,而这些数字就是我要充值的价格,框后面有一个按钮 按钮一点就可以跳往第三方支付的支付页面(手动滑稽);
1.按钮一点击完毕就要提交数据了鸭!!(这个按钮跳的路径就是第三方给你的请求路径)
######2.这个时候我们应该按照第三文档的要求创建一个类(这个类要包含了第三方给你的字段,记住类型不要错)
######3.我们按照字段给字段设置值,因为第三方是要求你传输过去的数据是有值的鸭!现在怎么办?好吧!我们按照要求将商户号号码,商户密钥,价格啊,订单号设置到刚刚我们新建的第三方类里面去,就好啦!
######4.然后我们在根据第三方文档进行数据加密!注意你数据拼接的时候一定要按照第三方文档的格式去拼接!然后在使用加密工具进行加密(MD5/RSA);加密出来的值一般是会作为签名提交给第三方!!!
######5.请求报文的时候都有一个请求地址和回调地址的参数,我们也按照要求设置给第三方类对象里面.方便使用!(为什么要设置类呢?)方便取值和赋值等等!
######6.如果所有的数据格式都没有问题的话,我们现在就可以以进入支付页面了!如果出现问题的话,根据返回的状态码来确认自己的数据格式有没有问题,一般都是加密方式错误,还有可能是拼接的时候顺序拼接反了等等…
######7.这个时候就应该掏出你的大手机了!打开支付宝或者微信,进行支付!(ok!支付成功!)
######8.你是不是以为到这里就完了??并没有!!!我这个时候打开我的个人中心发现!!!我靠!!!我刚才充值的1000万怎么没到账!!!(这个时候你准备打电话给支付宝公司问问情况!!!客服反正也说有这一笔交易!!!但是由于不知道是不是你本人操作,我们无法给你提供更准确的消息!)于是你又掏出了你的大手机准备给当前平台的董事长打电话!!!这个时候技术技术经理过来!!!大声呵斥道,你这个猪脑阔,人家第三方报文给你了,你自己不去处理自己的订单状态,不处理余额状态,等着我给你处理啊!!
######9.于是我嘴上笑嘻嘻的(心里mmp)看着经理,对着经理天真一笑嘿嘿~,对这个时候第三方会根据你提交时候的返回报文的地址进行返回报文,这个时候一般会连同之前传输给你的数据全部返回给你,并且会多了一个状态码(支付成功,支付失败,未支付…)!!
######10.这个时候你又要按照规则去将第三方返回的数据再去加密这一串数据,然后在进行对比!(是不是觉得有点脑残?没办法嘛!人家也是为了安全!为了防止别人恶意串改)
######11.一般情况下我们是可以通过request.getParameter("")这个方法获取到数据的,这时候一般第三方会给我们一个签名一般使用request.getParameter(“sign”)可以得到!
######12.需要的数据获取完了过后,我们就要进行日志操作了,将一些日志信息存储起来,以免以后用户说自己充了钱没有到账的情况(然后我们就可以查看日志了鸭!).
######13.我们将数据加密后得到一串字符串我们叫他sgin1吧,request.getParameter(“sign”)获取到的签名的加密数据进行equals,看一看是不是为true,如果是true就可以进行用户的余额充值,订单状态操作等等…
###(✺ω✺)大概就这么多啦,当然不同的第三方支付可能支付请求的参数,格式,加密方式都不一样,我这里只是说一下大概的思路(✺ω✺)
###(✺ω✺)哈哈哈哈哈哈嗝(✺ω✺)
###(✺ω✺)然后分享一部分代码粗来!(✺ω✺)
(✺ω✺)请求的代码差不多是这样子的!
//设置八达付支付请求对象
BadaPay baDaPay = new BadaPay();
//设置版本号,默认版本是3.0;
baDaPay.setVersion(chargePay.getInterfaceVersion());
//设置商户号码
baDaPay.setPartner(chargePay.getMemberId());
//设置接口名称,接口是pay接口;
baDaPay.setMethod("pay");
//设置银行类型,现在只支持ALIPAY;
baDaPay.setBanktype(payId);
//设置requestType的默认值
baDaPay.setRequesttype("pro");
//设置支付金额
baDaPay.setPaymoney(OrderMoney);
//设置商户系统订单号
baDaPay.setOrdernumber(orderId);
//设置下行异步通知地址,返回地址
baDaPay.setCallbackurl(chargePay.getNotifyUrl());
//设置当前订单时间戳
baDaPay.setTimestamp(currTime.getTime());
//设置herf参数
baDaPay.setHrefbackurl(returnUrl);
//设置相关参数
baDaPay.setGoodsname("");
baDaPay.setMemberId(currentUser.getUserName());
baDaPay.setAttach("");
//设置商户秘钥
baDaPay.setSign(chargePay.getSign());
//获取商户秘钥
String MD5Key = chargePay.getSign();
String MARK = "&";
//需要加密的字段;
String baDaPayMD5 = new String("version=" + baDaPay.getVersion() + MARK + "method=" + baDaPay.getMethod() + MARK + "partner=" + baDaPay.getPartner() + MARK
+ "banktype=" + baDaPay.getBanktype() + MARK + "paymoney=" + baDaPay.getPaymoney() + MARK + "ordernumber=" + orderId + MARK + "timestamp="
+ baDaPay.getTimestamp() + MARK + "callbackurl=" + baDaPay.getCallbackurl() + MD5Key);
String Signature = Md5Util.getMD5ofStr(baDaPayMD5, "GB2312");//获取MD5值
log.info("md5原始串: " + baDaPayMD5 + "生成后的交易签名:" + Signature);
//设置交易签名
baDaPay.setSign(Signature);
//冲值订单
RechargeWithDrawOrder rechargeOrder = new RechargeWithDrawOrder();
//管理员ID
rechargeOrder.setAdminId(null);
//用户ID
rechargeOrder.setUserId(currentUser.getId());
//快捷ID
rechargeOrder.setChargePayId(chargePay.getId());
//用户名称
rechargeOrder.setUserName(currentUser.getUserName());
//申请金额
rechargeOrder.setApplyValue(new BigDecimal(orderMoneyYuan));
//订单创建时间
rechargeOrder.setCreatedDate(new Date());
//操作类型
rechargeOrder.setOperateType(EFundOperateType.RECHARGE.name());
//充值类型
rechargeOrder.setPayType(payType);
//第三方充值类型
rechargeOrder.setThirdPayType(EFundThirdPayType.BDPAY.name());
//操作描述
rechargeOrder.setOperateDes(EFundPayType.valueOf(payType).getDescription());
//流水号
rechargeOrder.setSerialNumber(orderId);
rechargeOrder.setPostscript("");
rechargeOrder.setDealStatus(EFundRechargeStatus.PAYMENT.name());
rechargeOrder.setBankName("");
rechargeOrder.setSubbranchName("");
rechargeOrder.setBankUserName("");
rechargeOrder.setBankId("");
rechargeOrder.setBankUrl("");
rechargeOrder.setBankAliasName("");
rechargeOrder.setBankType("");
rechargeOrder.setBizSystem(currentUser.getBizSystem());
rechargeOrder.setRefType(EFundRefType.THIRDPAY.name());
rechargeOrder.setFromType(currentUser.getLoginType());
//保存新的订单到数据库中
rechargeWithDrawOrderService.insertSelective(rechargeOrder);
(✺ω✺)表单提交的时候大概是这样的!!(✺ω✺)
<form method="post" name="pay" id="pay" action="<%=payUrl%>">
<TABLE>
<TR>
<TD>
<input name='partner' type='hidden'value="<%=baDaPay.getPartner()%>" />
<input name='version' type='hidden' value="<%=baDaPay.getVersion()%>" />
<input name='requesttype' type='hidden' value="<%=baDaPay.getRequesttype()%>" />
<input name='method' type='hidden' value="<%=baDaPay.getMethod()%>" />
<input name='banktype' type='hidden' value="<%=baDaPay.getBanktype()%>" />
<input name='paymoney' type='hidden' value="<%=baDaPay.getPaymoney()%>" />
<input name='ordernumber' type='hidden' value="<%=baDaPay.getOrdernumber()%>" />
<input name='callbackurl' type='hidden' value="<%=baDaPay.getCallbackurl()%>" />
<input name='timestamp' type='hidden' value="<%=baDaPay.getTimestamp()%>" />
<input name='hrefbackurl' type='hidden' value="<%=baDaPay.getHrefbackurl()%>" />
<input name='goodsname' type='hidden' value="<%=baDaPay.getGoodsname()%>" />
<input name='memberId' type='hidden' value="<%=baDaPay.getMemberId()%>" />
<input name='attach' type='hidden' value="<%=baDaPay.getAttach()%>" />
<input name='sign' type='hidden' value="<%=baDaPay.getSign()%>" />
</TD>
</TR>
</TABLE>
</form>
###(✺ω✺)报文请求的页面,我就不copy粗来了,怕明天主管骂我!!(✺ω✺)
####(✺ω✺)最后给你分享一句名言(✺ω✺)
###(✺ω✺)只要思想不滑坡,办法总比困难多(✺ω✺)
###(✺ω✺)谢谢观赏…