最近在做一个电子商务的项目,刚接手这个项目时发现好多问题,就拿转账来说,后台没有直接转账到商家账户,需要到银行柜台转账,感觉这样的设计太失败了,不说几万人用,就是几千人,一天也有300多号人的账务需要处理。一个一个的转账,感觉太不可思议了。经过改良由于与银行直接对接的成本比较高,就决定使用支付宝的单笔转账功能。
支付宝的集都不用多说了,官方的文档比较详细:
下面就谈一谈如何集成到商城后台中通过一个个审核按钮通过,直接转账到对方的账户。省了很多的麻烦。
在审核的按钮控制代码中,添加如下代码,并且取到相应的值:
AlipayConfig.appid //支付宝APPID;
// 支付宝的公钥,无需修改该值
AlipayConfig.public_key:
// 商户的私钥
AlipayConfig.private_key:
初始化:AlipayClient AlipayFundTransToaccountTransferRequest 转账api
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.serverUrl, AlipayConfig.app_id, AlipayConfig.private_key, "JSON", "utf-8", AlipayConfig.public_key); AlipayFundTransToaccountTransferRequest request1 = new AlipayFundTransToaccountTransferRequest(); JsonObject object=new JsonObject(); object.addProperty("out_biz_no", withdrawId+DateUtils.currentDatetime()); object.addProperty("payee_type", "ALIPAY_LOGONID"); object.addProperty("payee_account", "账户"); object.addProperty("amount", 0.1); object.addProperty("payer_show_name", "转账公司的名称"); object.addProperty("payee_real_name", "实名"); object.addProperty("remark", ""); request1.setBizContent(object.toString()); AlipayFundTransToaccountTransferResponse response = alipayClient.execute(request1); String string = response.getBody().toString(); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"+string); formMap.put("withdraw_id", withdrawId); formMap.put("examine_state", 3); formMap.put("examine_season", examineSeason); formMap.put("update_time", DateUtils.currentDatetime()); formMap.put("update_person", Common.findUserSessionId()); formMap.update(); returnMoney(withdrawId); //退款至钱包 }
在这里需要注意的是,如果实名和支付宝账号不一致,会出现40004:
如果出现40006,是你没有申请单笔转账的权限:
如下图:签约申请即可