近来在开发个人站的时候,遇到支付问题,对于个人站长而言,没有公司,也没有营业执照,免签个人支付系统尤为重要,网上也有很多,这里简单介绍Java搭建支付宝当面付接口功能。
个人能力有限,仅供个人参考,勿用到生产环境
测试及下载项目源码 测试站点
个人用户可用,营业执照是选填项,无需企业/营业资质(懂得都懂~
当面付开通很简单,直接百度一张店铺照片就可以开通
支付宝当面付限制(无营业执照):
单笔收款 ≤2000元,单日收款 ≤20000元,不区分借记或贷记渠道。
下面简单来看下Java服务器端代码:
用到的官方Java版sdk jar包自行下载
core.java 调用支付宝官方接口核心功能
很简单,注释很清楚,不过多解释,具体看代码
public class core {
AlipayClient client = null;
/**支付宝回调的接口地址*/
private static String aliNotifyUrl = "yourweb/pay/alinotify";
public core() {
getConfig();
}
/**
* 创建付款订单
*/
public HashMap<String, String> createOrder(double num,String title){
if(num<=0) return null;
HashMap<String, String> rs = new HashMap<>();
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
//生成不重复的商家订单号(我用的时间+随机数)
String h=new Date().getTime()+Utils.randomNum(10, 99)+"";
AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
model.setOutTradeNo(h);//订单号(保证不重复)
model.setTotalAmount(num+"");//订单金额
model.setSubject(title);//标题(关键字)不可用特殊标点
model.setQrCodeTimeoutExpress("10m");
request.setBizModel(model);
request.setNotifyUrl(aliNotifyUrl);//应用网关(异步通知)
AlipayTradePrecreateResponse response = null;
try {
response = client.execute(request);
} catch (AlipayApiException e) {e.printStackTrace();}
if(response.isSuccess()){
//订单存入数据库 根据自己需求建表存入(此处我使用的自己封装的SQL工具)
DBUtil db = new DBUtil();
int i = db.execUpdate("insert into _orders(out_trade_no,otitle,onum,qrcode) values("+ response.getOutTradeNo()+",?,"+num+",?)", new String[]{title,response.getQrCode()});
if(i==1){
rs.put("code", "1");
rs.put("qrcode", response.getQrCode());
//将qrcode转为base64格式图片
rs.put("qrimg", ImgUtils.QrImgB64(response.getQrCode(), 300));
rs.put("out_trade_no", response.getOutTradeNo());
}else rs.put("code", "-1");
} else {
rs.put("code", "-1");
}
return rs;
}
/**查询订单状态*/
public Map<String, Object> queryOrder(String orderId){
if(orderId==null||orderId.tr