diff --git a/README.md b/README.md index 3976d6d..d789d3c 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,13 @@ 测试链接 : http://pay.egzosn.com/index.html -服务端+网页端详细使用与简单教程请看 [pay-java-demo](pay-java-demo?dir=1&filepath=pay-java-demo) +#######单一支付教程 + [支付宝](pay-java-ali?dir=1&filepath=pay-java-ali) + [微信](pay-java-wx?dir=1&filepath=pay-java-wx) + [友店微信](pay-java-wx-youdian?dir=1&filepath=pay-java-youdian) + [富友](pay-java-fuiou?dir=1&filepath=pay-java-fuiou) + +支付整合》服务端+网页端详细使用与简单教程请看 [pay-java-demo](pay-java-demo?dir=1&filepath=pay-java-demo) android 例子 [pay-java-android](http://git.oschina.net/egzosn/pay-java-android) diff --git a/pay-java-ali/README.md b/pay-java-ali/README.md new file mode 100644 index 0000000..2f74608 --- /dev/null +++ b/pay-java-ali/README.md @@ -0,0 +1,118 @@ + + +##支付宝支付简单例子 + +####支付配置 + +```java + + + AliPayConfigStorage aliPayConfigStorage = new AliPayConfigStorage(); + aliPayConfigStorage.setPid("合作者id"); + aliPayConfigStorage.setAppId("应用id"); + aliPayConfigStorage.setAliPublicKey("支付宝公钥"); + aliPayConfigStorage.setKeyPrivate("应用私钥"); + aliPayConfigStorage.setNotifyUrl("异步回调地址"); + aliPayConfigStorage.setReturnUrl("同步回调地址"); + aliPayConfigStorage.setSignType("签名方式"); + aliPayConfigStorage.setSeller("收款账号"); + aliPayConfigStorage.setInputCharset("utf-8"); + //是否为测试账号,沙箱环境 + aliPayConfigStorage.setTest(true); + +``` + + +####创建支付服务 + + +```java + //支付服务 + PayService service = new AliPayService(aliPayConfigStorage); + +``` + +####创建支付订单信息 + +```java + + //支付订单基础信息 + PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , UUID.randomUUID().toString().replace("-", "")); + +``` + +####扫码付 + +```java + + + /*-----------扫码付-------------------*/ + payOrder.setTransactionType(AliTransactionType.SWEEPPAY); + //获取扫码付的二维码 + BufferedImage image = service.genQrPay(payOrder); + /*-----------/扫码付-------------------*/ + +``` + +####APP支付 + +```java + + /*-----------APP-------------------*/ + payOrder.setTransactionType(AliTransactionType.APP); + //获取APP支付所需的信息组,直接给app端就可使用 + Map appOrderInfo = service.orderInfo(payOrder); + /*-----------/APP-------------------*/ + +``` + +####即时到帐 WAP 网页支付 + +```java + + /*-----------即时到帐 WAP 网页支付-------------------*/ +// payOrder.setTransactionType(AliTransactionType.WAP); //WAP支付 + + payOrder.setTransactionType(AliTransactionType.DIRECT); // 即时到帐 PC网页支付 + //获取支付所需的信息 + Map directOrderInfo = service.orderInfo(payOrder); + //获取表单提交对应的字符串,将其序列化到页面即可, + String directHtml = service.buildRequest(directOrderInfo, MethodType.POST); + /*-----------/即时到帐 WAP 网页支付-------------------*/ + +``` + +####条码付 声波付 + +```java + + /*-----------条码付 声波付-------------------*/ + +// payOrder.setTransactionType(AliTransactionType.WAVE_CODE); //声波付 + payOrder.setTransactionType(AliTransactionType.BAR_CODE);//条码付 + + payOrder.setAuthCode("条码信息或者声波信息"); + // 支付结果 + Map params = service.microPay(payOrder); + /*-----------/条码付 声波付-------------------*/ + +``` + +####回调处理 + +```java + + /*-----------回调处理-------------------*/ + //HttpServletRequest request; + Map params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + if (service.verify(params)){ + System.out.println("支付成功"); + return; + } + System.out.println("支付失败"); + + + /*-----------回调处理-------------------*/ + +``` + diff --git a/pay-java-ali/src/test/java/PayTest.java b/pay-java-ali/src/test/java/PayTest.java new file mode 100644 index 0000000..e9e9975 --- /dev/null +++ b/pay-java-ali/src/test/java/PayTest.java @@ -0,0 +1,88 @@ +import com.egzosn.pay.ali.api.AliPayConfigStorage; +import com.egzosn.pay.ali.api.AliPayService; +import com.egzosn.pay.ali.bean.AliTransactionType; +import com.egzosn.pay.common.api.PayService; +import com.egzosn.pay.common.bean.MethodType; +import com.egzosn.pay.common.bean.PayOrder; + +import java.awt.image.BufferedImage; +import java.math.BigDecimal; +import java.util.Map; +import java.util.UUID; + +/** + * + * + * 支付宝测试 + * @author egan + * @email egzosn@gmail.com + * @date 2017/8/18 + */ +public class PayTest { + + public static void main(String[] args) { + + AliPayConfigStorage aliPayConfigStorage = new AliPayConfigStorage(); + aliPayConfigStorage.setPid("合作者id"); + aliPayConfigStorage.setAppId("应用id"); + aliPayConfigStorage.setAliPublicKey("支付宝公钥"); + aliPayConfigStorage.setKeyPrivate("应用私钥"); + aliPayConfigStorage.setNotifyUrl("异步回调地址"); + aliPayConfigStorage.setReturnUrl("同步回调地址"); + aliPayConfigStorage.setSignType("签名方式"); + aliPayConfigStorage.setSeller("收款账号"); + aliPayConfigStorage.setInputCharset("utf-8"); + //是否为测试账号,沙箱环境 + aliPayConfigStorage.setTest(true); + //支付服务 + PayService service = new AliPayService(aliPayConfigStorage); + //支付订单基础信息 + PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , UUID.randomUUID().toString().replace("-", "")); + /*-----------扫码付-------------------*/ + payOrder.setTransactionType(AliTransactionType.SWEEPPAY); + //获取扫码付的二维码 + BufferedImage image = service.genQrPay(payOrder); + /*-----------/扫码付-------------------*/ + + /*-----------APP-------------------*/ + payOrder.setTransactionType(AliTransactionType.APP); + //获取APP支付所需的信息组,直接给app端就可使用 + Map appOrderInfo = service.orderInfo(payOrder); + /*-----------/APP-------------------*/ + + /*-----------即时到帐 WAP 网页支付-------------------*/ +// payOrder.setTransactionType(AliTransactionType.WAP); //WAP支付 + + payOrder.setTransactionType(AliTransactionType.DIRECT); // 即时到帐 PC网页支付 + //获取支付所需的信息 + Map directOrderInfo = service.orderInfo(payOrder); + //获取表单提交对应的字符串,将其序列化到页面即可, + String directHtml = service.buildRequest(directOrderInfo, MethodType.POST); + /*-----------/即时到帐 WAP 网页支付-------------------*/ + + + + /*-----------条码付 声波付-------------------*/ + +// payOrder.setTransactionType(AliTransactionType.WAVE_CODE); //声波付 + payOrder.setTransactionType(AliTransactionType.BAR_CODE);//条码付 + + payOrder.setAuthCode("条码信息或者声波信息"); + // 支付结果 + Map params = service.microPay(payOrder); + + /*-----------/条码付 声波付-------------------*/ + + /*-----------回调处理-------------------*/ +// HttpServletRequest request +// params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + if (service.verify(params)){ + System.out.println("支付成功"); + return; + } + System.out.println("支付失败"); + + + /*-----------回调处理-------------------*/ + } +} diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java index 26b46de..b73169e 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java @@ -146,6 +146,12 @@ public class PayOrder { this.outTradeNo = outTradeNo; this.transactionType = transactionType; } + public PayOrder(String subject, String body, BigDecimal price, String outTradeNo) { + this.subject = subject; + this.body = body; + this.price = price; + this.outTradeNo = outTradeNo; + } public String getOpenid() { return openid; diff --git a/pay-java-fuiou/README.md b/pay-java-fuiou/README.md new file mode 100644 index 0000000..0cd3c23 --- /dev/null +++ b/pay-java-fuiou/README.md @@ -0,0 +1,77 @@ + + +##支付宝支付简单例子 + +####支付配置 + +```java + + + + FuiouPayConfigStorage fuiouPayConfigStorage = new FuiouPayConfigStorage(); + fuiouPayConfigStorage.setMchntCd("合作者id"); + fuiouPayConfigStorage.setKeyPublic("支付密钥"); + fuiouPayConfigStorage.setKeyPrivate("支付密钥"); + fuiouPayConfigStorage.setNotifyUrl("异步回调地址"); + fuiouPayConfigStorage.setReturnUrl("同步回调地址"); + fuiouPayConfigStorage.setSignType("MD5"); + fuiouPayConfigStorage.setInputCharset("utf-8"); + //是否为测试账号,沙箱环境 + fuiouPayConfigStorage.setTest(true); + +``` + + +####创建支付服务 + +```java + + //支付服务 + PayService service = new FuiouPayService(fuiouPayConfigStorage); + +``` + +####创建支付订单信息 + +```java + + //支付订单基础信息 + PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , UUID.randomUUID().toString().replace("-", "").substring(2)); + +``` + + +####网页支付 + +```java + + /*----------- 网页支付-------------------*/ +// payOrder.setTransactionType(FuiouTransactionType.B2B); + payOrder.setTransactionType(FuiouTransactionType.B2C); + //获取支付所需的信息 + Map directOrderInfo = service.orderInfo(payOrder); + //获取表单提交对应的字符串,将其序列化到页面即可, + String directHtml = service.buildRequest(directOrderInfo, MethodType.POST); + /*-----------/网页支付-------------------*/ + +``` + + +####回调处理 + +```java + + /*-----------回调处理-------------------*/ + //HttpServletRequest request; + Map params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + if (service.verify(params)){ + System.out.println("支付成功"); + return; + } + System.out.println("支付失败"); + + + /*-----------回调处理-------------------*/ + +``` + diff --git a/pay-java-fuiou/src/test/java/PayTest.java b/pay-java-fuiou/src/test/java/PayTest.java new file mode 100644 index 0000000..a59cca0 --- /dev/null +++ b/pay-java-fuiou/src/test/java/PayTest.java @@ -0,0 +1,69 @@ +import com.egzosn.pay.common.api.PayService; +import com.egzosn.pay.common.bean.MethodType; +import com.egzosn.pay.common.bean.PayOrder; +import com.egzosn.pay.fuiou.api.FuiouPayConfigStorage; +import com.egzosn.pay.fuiou.api.FuiouPayService; +import com.egzosn.pay.fuiou.bean.FuiouTransactionType; + +import java.awt.image.BufferedImage; +import java.math.BigDecimal; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.UUID; + +/** + * + * + * 富友支付测试 + * @author egan + * @email egzosn@gmail.com + * @date 2017/8/18 + */ +public class PayTest { + + public static void main(String[] args) { + + + FuiouPayConfigStorage fuiouPayConfigStorage = new FuiouPayConfigStorage(); + fuiouPayConfigStorage.setMchntCd("合作者id"); + fuiouPayConfigStorage.setKeyPublic("支付密钥"); + fuiouPayConfigStorage.setKeyPrivate("支付密钥"); + fuiouPayConfigStorage.setNotifyUrl("异步回调地址"); + fuiouPayConfigStorage.setReturnUrl("同步回调地址"); + fuiouPayConfigStorage.setSignType("MD5"); + fuiouPayConfigStorage.setInputCharset("utf-8"); + //是否为测试账号,沙箱环境 + fuiouPayConfigStorage.setTest(true); + //支付服务 + PayService service = new FuiouPayService(fuiouPayConfigStorage); + //支付订单基础信息 + PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , UUID.randomUUID().toString().replace("-", "").substring(2)); + + + /*----------- 网页支付-------------------*/ +// payOrder.setTransactionType(FuiouTransactionType.B2B); + payOrder.setTransactionType(FuiouTransactionType.B2C); + //获取支付所需的信息 + Map directOrderInfo = service.orderInfo(payOrder); + //获取表单提交对应的字符串,将其序列化到页面即可, + String directHtml = service.buildRequest(directOrderInfo, MethodType.POST); + /*-----------/网页支付-------------------*/ + + /*-----------回调处理-------------------*/ + + Map params = null; +// HttpServletRequest request +// params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + if (service.verify(params)){ + System.out.println("支付成功"); + return; + } + System.out.println("支付失败"); + + + /*-----------回调处理-------------------*/ + + } + + +} diff --git a/pay-java-wx-youdian/README.md b/pay-java-wx-youdian/README.md new file mode 100644 index 0000000..c1c5df4 --- /dev/null +++ b/pay-java-wx-youdian/README.md @@ -0,0 +1,74 @@ + + +##支付宝支付简单例子 + +####支付配置 + +```java + + + + WxYouDianPayConfigStorage wxPayConfigStorage = new WxYouDianPayConfigStorage(); + wxPayConfigStorage.setKeyPrivate("友店所提供的加密串"); + wxPayConfigStorage.setKeyPublic("线下支付异步通知加签密钥"); +// wxPayConfigStorage.setNotifyUrl(account.getNotifyUrl()); +// wxPayConfigStorage.setReturnUrl(account.getReturnUrl()); + wxPayConfigStorage.setSeller("友店账号"); + wxPayConfigStorage.setSignType("签名方式"); + wxPayConfigStorage.setInputCharset("utf-8"); + //是否为测试账号,沙箱环境 此处暂未实现 + wxPayConfigStorage.setTest(true); + +``` + + +####创建支付服务 + +```java + + //支付服务 + PayService service = new WxYouDianPayService(wxPayConfigStorage); + +``` + +####创建支付订单信息 + +```java + + //支付订单基础信息 + PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , UUID.randomUUID().toString().replace("-", "")); + +``` + + +####扫码付 + +```java + + /*-----------扫码付-------------------*/ + payOrder.setTransactionType(YoudianTransactionType.NATIVE); + //获取扫码付的二维码 + BufferedImage image = service.genQrPay(payOrder); + /*-----------/扫码付-------------------*/ + +``` + + +####回调处理 + +```java + + /*-----------回调处理-------------------*/ + //HttpServletRequest request; + Map params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + if (service.verify(params)){ + System.out.println("支付成功"); + return; + } + System.out.println("支付失败"); + + + /*-----------回调处理-------------------*/ + +``` + diff --git a/pay-java-wx-youdian/src/test/java/PayTest.java b/pay-java-wx-youdian/src/test/java/PayTest.java new file mode 100644 index 0000000..069cca4 --- /dev/null +++ b/pay-java-wx-youdian/src/test/java/PayTest.java @@ -0,0 +1,61 @@ + +import com.egzosn.pay.common.api.PayService; +import com.egzosn.pay.common.bean.MethodType; +import com.egzosn.pay.common.bean.PayOrder; +import com.egzosn.pay.wx.youdian.api.WxYouDianPayConfigStorage; +import com.egzosn.pay.wx.youdian.api.WxYouDianPayService; +import com.egzosn.pay.wx.youdian.bean.YoudianTransactionType; + +import java.awt.image.BufferedImage; +import java.math.BigDecimal; +import java.util.Map; +import java.util.UUID; + +/** + * + * + * 友店微信 + * @author egan + * @email egzosn@gmail.com + * @date 2017/8/18 + */ +public class PayTest { + + public static void main(String[] args) { + + + WxYouDianPayConfigStorage wxPayConfigStorage = new WxYouDianPayConfigStorage(); + wxPayConfigStorage.setKeyPrivate("友店所提供的加密串"); + wxPayConfigStorage.setKeyPublic("线下支付异步通知加签密钥"); +// wxPayConfigStorage.setNotifyUrl(account.getNotifyUrl()); +// wxPayConfigStorage.setReturnUrl(account.getReturnUrl()); + wxPayConfigStorage.setSeller("友店账号"); + wxPayConfigStorage.setSignType("签名方式"); + wxPayConfigStorage.setInputCharset("utf-8"); + //是否为测试账号,沙箱环境 此处暂未实现 + wxPayConfigStorage.setTest(true); + //支付服务 + PayService service = new WxYouDianPayService(wxPayConfigStorage); + //支付订单基础信息 + PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , UUID.randomUUID().toString().replace("-", "")); + /*-----------扫码付-------------------*/ + payOrder.setTransactionType(YoudianTransactionType.NATIVE); + //获取扫码付的二维码 + BufferedImage image = service.genQrPay(payOrder); + /*-----------/扫码付-------------------*/ + + + /*-----------回调处理-------------------*/ + Map params = null; +// HttpServletRequest request +// params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + if (service.verify(params)){ + System.out.println("支付成功"); + return; + } + System.out.println("支付失败"); + + + /*-----------回调处理-------------------*/ + } +} diff --git a/pay-java-wx/README.md b/pay-java-wx/README.md new file mode 100644 index 0000000..6a42d7f --- /dev/null +++ b/pay-java-wx/README.md @@ -0,0 +1,114 @@ + + +##支付宝支付简单例子 + +####支付配置 + +```java + + WxPayConfigStorage wxPayConfigStorage = new WxPayConfigStorage(); + wxPayConfigStorage.setMchId("合作者id(商户号)"); + wxPayConfigStorage.setAppid("应用id"); + wxPayConfigStorage.setKeyPublic("密钥"); + wxPayConfigStorage.setKeyPrivate("密钥"); + wxPayConfigStorage.setNotifyUrl("异步回调地址"); + wxPayConfigStorage.setReturnUrl("同步回调地址"); + wxPayConfigStorage.setSignType("签名方式"); + wxPayConfigStorage.setInputCharset("utf-8"); + //是否为测试账号,沙箱环境 此处暂未实现 + wxPayConfigStorage.setTest(true); + +``` + + +####创建支付服务 + +```java + + //支付服务 + PayService service = new WxPayService(wxPayConfigStorage); + +``` + +####创建支付订单信息 + +```java + + //支付订单基础信息 + PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , UUID.randomUUID().toString().replace("-", "")); + +``` + +####扫码付 + +```java + + + /*-----------扫码付-------------------*/ + payOrder.setTransactionType(WxTransactionType.NATIVE); + //获取扫码付的二维码 + BufferedImage image = service.genQrPay(payOrder); + /*-----------/扫码付-------------------*/ + + +``` + +####APP支付 + +```java + + /*-----------APP-------------------*/ + payOrder.setTransactionType(WxTransactionType.APP); + //获取APP支付所需的信息组,直接给app端就可使用 + Map appOrderInfo = service.orderInfo(payOrder); + /*-----------/APP-------------------*/ + +``` + +####网页支付 + +```java + + /*-----------网页支付-------------------*/ + + payOrder.setTransactionType(WxTransactionType.MWEB); // 网页支付 + //获取支付所需的信息 + Map directOrderInfo = service.orderInfo(payOrder); + //获取表单提交对应的字符串,将其序列化到页面即可, + String directHtml = service.buildRequest(directOrderInfo, MethodType.POST); + /*-----------/即时到帐 WAP 网页支付-------------------*/ + +``` + +####条码付 刷卡付 + +```java + + /*-----------条码付 刷卡付-------------------*/ + payOrder.setTransactionType(WxTransactionType.MICROPAY);//条码付 + payOrder.setAuthCode("条码信息"); + // 支付结果 + Map params = service.microPay(payOrder); + + /*-----------/条码付 刷卡付-------------------*/ + +``` + +####回调处理 + +```java + + /*-----------回调处理-------------------*/ + //HttpServletRequest request; + Map params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + if (service.verify(params)){ + System.out.println("支付成功"); + return; + } + System.out.println("支付失败"); + + + /*-----------回调处理-------------------*/ + +``` + diff --git a/pay-java-wx/src/test/java/PayTest.java b/pay-java-wx/src/test/java/PayTest.java new file mode 100644 index 0000000..b0b8dd4 --- /dev/null +++ b/pay-java-wx/src/test/java/PayTest.java @@ -0,0 +1,83 @@ + +import com.egzosn.pay.common.api.PayService; +import com.egzosn.pay.common.bean.MethodType; +import com.egzosn.pay.common.bean.PayOrder; +import com.egzosn.pay.wx.api.WxPayConfigStorage; +import com.egzosn.pay.wx.api.WxPayService; +import com.egzosn.pay.wx.bean.WxTransactionType; + +import java.awt.image.BufferedImage; +import java.math.BigDecimal; +import java.util.Map; +import java.util.UUID; + +/** + * + * + * 微信 + * @author egan + * @email egzosn@gmail.com + * @date 2017/8/18 + */ +public class PayTest { + + public static void main(String[] args) { + WxPayConfigStorage wxPayConfigStorage = new WxPayConfigStorage(); + wxPayConfigStorage.setMchId("合作者id(商户号)"); + wxPayConfigStorage.setAppid("应用id"); + wxPayConfigStorage.setKeyPublic("密钥"); + wxPayConfigStorage.setKeyPrivate("密钥"); + wxPayConfigStorage.setNotifyUrl("异步回调地址"); + wxPayConfigStorage.setReturnUrl("同步回调地址"); + wxPayConfigStorage.setSignType("签名方式"); + wxPayConfigStorage.setInputCharset("utf-8"); + //是否为测试账号,沙箱环境 此处暂未实现 + wxPayConfigStorage.setTest(true); + //支付服务 + PayService service = new WxPayService(wxPayConfigStorage); + //支付订单基础信息 + PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , UUID.randomUUID().toString().replace("-", "")); + /*-----------扫码付-------------------*/ + payOrder.setTransactionType(WxTransactionType.NATIVE); + //获取扫码付的二维码 + BufferedImage image = service.genQrPay(payOrder); + /*-----------/扫码付-------------------*/ + + /*-----------APP-------------------*/ + payOrder.setTransactionType(WxTransactionType.APP); + //获取APP支付所需的信息组,直接给app端就可使用 + Map appOrderInfo = service.orderInfo(payOrder); + /*-----------/APP-------------------*/ + + /*----------- WAP 网页支付-------------------*/ + + payOrder.setTransactionType(WxTransactionType.MWEB); // 网页支付 + //获取支付所需的信息 + Map directOrderInfo = service.orderInfo(payOrder); + //获取表单提交对应的字符串,将其序列化到页面即可, + String directHtml = service.buildRequest(directOrderInfo, MethodType.POST); + /*-----------/ WAP 网页支付-------------------*/ + + + + /*-----------条码付 刷卡付-------------------*/ + payOrder.setTransactionType(WxTransactionType.MICROPAY);//条码付 + payOrder.setAuthCode("条码信息"); + // 支付结果 + Map params = service.microPay(payOrder); + + /*-----------/条码付 刷卡付-------------------*/ + + /*-----------回调处理-------------------*/ +// HttpServletRequest request +// params = service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + if (service.verify(params)){ + System.out.println("支付成功"); + return; + } + System.out.println("支付失败"); + + + /*-----------回调处理-------------------*/ + } +}