import com.pingplusplus.Pingpp; import com.pingplusplus.exception.PingppException; import com.pingplusplus.model.Charge; import com.pingxx.example.Main; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONObject; /** * 处理订单生成 * * @author JadeLuo */ public class PaySlt extends SupPay { private final String wx_pub = "wx_pub"; /** * * @param request * @param response * @throws ServletException * @throws IOException */ @Override protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); response.addHeader("Access-Control-Allow-Origin", "*"); response.addHeader("Access-Control-Allow-Methods", "GET,POST"); response.addHeader("Access-Control-Allow-Headers", "Content-Type"); PrintWriter out = response.getWriter(); // 设置私钥路径,用于请求签名 Pingpp.privateKeyPath = request.getRealPath("/") + "/WEB-INF/res/rsa_private_key.pem"; // 设置 API Key Pingpp.apiKey = " "; String reqInfo = request.getParameter("tk"), isEncode = request.getParameter("isencode"); if (TL.isEmpty(reqInfo)) { out.println(new JSONObject().put("R", "1").put("M", "服务端检测请求信息为空,请检查key是否为tk").toString()); return; } try { if (TL.isEmpty(isEncode)) { reqInfo = SkpyFlx.decode(reqInfo); } log.debug("收到的tk值:" + reqInfo); } catch (Exception ex) { Logger.getLogger(PaySlt.class.getName()).log(Level.SEVERE, null, ex); } JSONObject jo = new JSONObject(reqInfo); Integer amt = jo.getInteger("amt"), nb = jo.getInteger("nb");//TODO 重构可改为nk String channel = jo.getString("channel"), usid = jo.getString("usid"), appId = jo.getString("appId"), subject = jo.getString("subject"),//订单概要 body = jo.getString("body"),//订单描述 openid = jo.getString("openid"),//订单描述 success_url = jo.getString("success_url"),//channel=alipay_pc_direct 支付宝 PC 网页支付 currency = jo.getString("currency");//货币 cny人民币 if (wx_pub.equals(channel)) { if (TL.isEmpty(openid)) { out.println(new JSONObject().put("R", "1").put("M", "服务端检测支付渠道为微信公众号但客户端未指定目标公众号").toString()); return; } } if (nb == null) { out.println(new JSONObject().put("R", "1").put("M", "服务端检测nb参数为空").toString()); return; } if (amt == null) { out.println(new JSONObject().put("R", "1").put("M", "服务端检测amt参数为空").toString()); return; } if (TL.isEmpty(channel)) { out.println(new JSONObject().put("R", "1").put("M", "服务端检测channel参数为空").toString()); return; } if (TL.isEmpty(usid)) { out.println(new JSONObject().put("R", "1").put("M", "服务端检测usid为空").toString()); return; } if (TL.isEmpty(appId)) { out.println(new JSONObject().put("R", "1").put("M", "服务端检测appId参数为空").toString()); return; } String orderId = new Date().getTime() + Main.randomString(7); Charge charge = createCharge(amt, channel, CusAccessObjectUtil.getIpAddress(request), appId, orderId, currency, subject, body, openid, success_url); String sql = L.i("insert into lfsj_trans_info(nuserid,nb,orderId,samt,cdate,usid,stype,stat) values (") .a("(SELECT nuserid FROM tbuserinformation where usid=") .s(usid).a("),").a2(nb).s2(orderId).a2(amt).a2("LOCALTIMESTAMP(0)").s2(usid).s2(channel).s("C").a(")").e(); if (HSF.excute(sql)) { out.println(charge.toString()); } } /** * 接收并处理交易结果 https://www.pingxx.com/guidance/client/sdk/pc 使用 PC Web * 支付后浏览器会跳转到 extra 中相应的 URL,支付宝对应 success_url,银联对应 result_url。 * * @param amount 订单总金额,单位为对应币种的最小货币单位,例如:人民币为分(如订单总金额为 1 元,此处请填 100)。 * @param channel 支付使用的第三方支付渠道,取值范围。 alipay: 支付宝手机支付 alipay_wap:支付宝手机网页支付 * alipay_pc_direct:支付宝 PC 网页支付 alipay_qr:支付宝扫码支付 bfb:百度钱包移动快捷支付 * bfb_wap:百度钱包手机网页支付 upacp:银联全渠道支付(2015 年 1 月 1 日后的银联新商户使用。若有疑问,请与 Ping++ * 或者相关的收单行联系) upacp_wap:银联全渠道手机网页支付(2015 年 1 月 1 日后的银联新商户使用。若有疑问,请与 Ping++ * 或者相关的收单行联系) upacp_pc:银联 PC 网页支付 cp_b2b:银联企业网银支付 wx:微信支付 wx_pub:微信公众账号支付 * wx_pub_qr:微信公众账号扫码支付 yeepay_wap:易宝手机网页支付 jdpay_wap:京东手机网页支付 * cnp_u:应用内快捷支付(银联) cnp_f:应用内快捷支付(外卡) applepay_upacp:Apple Pay * fqlpay_wap:分期乐支付 qgbc_wap:量化派支付 * @param ip 发起支付请求客户端的 ip 地址,格式为 IPV4 整型,如 127.0.0.1。 * @param appId * @param orderNo 商户订单号,适配每个渠道对此参数的要求,必须在商户系统内唯一。(alipay: 1-64 位, wx: 2-32 * 位,bfb: 1-20 位,upacp: 8-40 位,yeepay_wap:1-50 位,jdpay_wap:1-30 位,cnp_u:8-20 * 位,cnp_f:8-20 位,推荐使用 8-20 位,要求数字或字母,不允许特殊字符)。 * @param currency 三位 ISO 货币代码,人民币为 cny。 * @param subject 订单概要 商品的标题,该参数最长为 32 个 Unicode * 字符,银联全渠道(upacp/upacp_wap)限制在 32 个字节。 * @param body 订单描述 商品的描述信息,该参数最长为 128 个 Unicode 字符,yeepay_wap 对于该参数长度限制为 * 100 个 Unicode 字符。 * @param openid 微信公众号 * @param success_url html5 channel=alipay_pc_direct|alipay_wap * @return */ public Charge createCharge(int amount, String channel, String ip, String appId, String orderNo, String currency, String subject, String body, String openid, String success_url) { Charge charge = null; Map<String, Object> chargeMap = new HashMap<String, Object>(); chargeMap.put("amount", amount); chargeMap.put("currency", currency); chargeMap.put("subject", subject); chargeMap.put("body", body); chargeMap.put("order_no", orderNo); chargeMap.put("channel", channel); if ("0:0:0:0:0:0:0:1".equals(ip)) {//TODO ip = "127.0.0.1"; } chargeMap.put("client_ip", ip); // 客户端 ip 地址(ipv4) Map<String, String> app = new HashMap<>(); app.put("id", appId); chargeMap.put("app", app); Map<String, Object> extra = new HashMap<>(); if ("alipay_pc_direct".equals(channel) || "alipay_wap".equals(channel)) { //https://www.pingxx.com/guidance/config extra.put("success_url", success_url); } if ("upmp_wap".equals(channel) || "upacp_pc".equals(channel)) { //https://www.pingxx.com/guidance/config extra.put("result_url", success_url); } if (TL.isNotEmpty(openid) && wx_pub.equals(channel)) { extra.put("open_id", openid);//微信公众号 } chargeMap.put("extra", extra); try { //发起交易请求 charge = Charge.create(chargeMap); // 传到客户端请先转成字符串 .toString(), 调该方法,会自动转成正确的 JSON 字符串 String chargeString = charge.toString(); log.debug("创建订单成功:\n" + chargeString); } catch (PingppException e) { log.debug("创建订单失败"); e.printStackTrace(); } return charge; } }
/** * * @param amount 订单总金额,单位为对应币种的最小货币单位,例如:人民币为分(如订单总金额为 1 元,此处请填 100)。 * @param channel 支付使用的第三方支付渠道,取值范围。 * alipay: 支付宝手机支付 alipay_wap:支付宝手机网页支付 alipay_pc_direct:支付宝 PC 网页支付 alipay_qr:支付宝扫码支付 bfb:百度钱包移动快捷支付 bfb_wap:百度钱包手机网页支付 upacp:银联全渠道支付(2015 年 1 月 1 日后的银联新商户使用。若有疑问,请与 Ping++ 或者相关的收单行联系) upacp_wap:银联全渠道手机网页支付(2015 年 1 月 1 日后的银联新商户使用。若有疑问,请与 Ping++ 或者相关的收单行联系) upacp_pc:银联 PC 网页支付 cp_b2b:银联企业网银支付 wx:微信支付 wx_pub:微信公众账号支付 wx_pub_qr:微信公众账号扫码支付 yeepay_wap:易宝手机网页支付 jdpay_wap:京东手机网页支付 cnp_u:应用内快捷支付(银联) cnp_f:应用内快捷支付(外卡) applepay_upacp:Apple Pay fqlpay_wap:分期乐支付 qgbc_wap:量化派支付 * @param ip 发起支付请求客户端的 ip 地址,格式为 IPV4 整型,如 127.0.0.1。 * @param appId * @param orderNo 商户订单号,适配每个渠道对此参数的要求,必须在商户系统内唯一。(alipay: 1-64 位, wx: 2-32 位,bfb: 1-20 位,upacp: 8-40 位,yeepay_wap:1-50 位,jdpay_wap:1-30 位,cnp_u:8-20 位,cnp_f:8-20 位,推荐使用 8-20 位,要求数字或字母,不允许特殊字符)。 * @param currency 三位 ISO 货币代码,人民币为 cny。 * @param subject 订单概要 商品的标题,该参数最长为 32 个 Unicode 字符,银联全渠道(upacp/upacp_wap)限制在 32 个字节。 * @param body 订单描述 商品的描述信息,该参数最长为 128 个 Unicode 字符,yeepay_wap 对于该参数长度限制为 100 个 Unicode 字符。 * @param openid 微信公众号 * @param success_url html5 channel=alipay_pc_direct|alipay_wap * @return */ public Charge createCharge(int amount, String channel, String ip, String appId, String orderNo, String currency, String subject, String body, String openid,String success_url) { Charge charge = null; Map<String, Object> chargeMap = new HashMap<String, Object>(); chargeMap.put("amount", amount); chargeMap.put("currency", currency); chargeMap.put("subject", subject); chargeMap.put("body", body); chargeMap.put("order_no", orderNo); chargeMap.put("channel", channel); if ("0:0:0:0:0:0:0:1".equals(ip)) {//TODO ip = "127.0.0.1"; } chargeMap.put("client_ip", ip); // 客户端 ip 地址(ipv4) Map<String, String> app = new HashMap<>(); app.put("id", appId); chargeMap.put("app", app); Map<String, Object> extra = new HashMap<>(); if ("alipay_pc_direct".equals(channel) || "alipay_wap".equals(channel)) { //https://www.pingxx.com/guidance/config extra.put("success_url",success_url); } if (TL.isNotEmpty(openid) && wx_pub.equals(channel)) { extra.put("open_id", openid);//微信公众号 } chargeMap.put("extra", extra); try { //发起交易请求 charge = Charge.create(chargeMap); // 传到客户端请先转成字符串 .toString(), 调该方法,会自动转成正确的 JSON 字符串 String chargeString = charge.toString(); log.debug("创建订单成功:\n" + chargeString); } catch (PingppException e) { e.printStackTrace(); } return charge; }
相关推荐
使用与支持 Vuplex VR/AR 浏览器的相同代码,即可轻松在 Windows 和 macOS 上以 3D 形式渲染 Web 内容并与之进行交互 该软件包支持 Android ≥ 6.0 上的原生视频和 WebGL,但某些 VR 虚拟现实头盔(如 Oculus Go 和 ...
Unity UniWebView unity支持android ios访问web插件
最新飞机即时通讯源码 PC+Android+IOS+WEB四端 经环境Nginx+mysql5.7+php7.3+redis+jdk1.8+etcd、kafka、minio、ssdb数据库imweb、enterprise、databus环境nginx+mysql5.7+php7.3+redis+jdk1.8+etcd、kafka、minio、...
3D WebView for Android and iOS Web Browser
使用与支持 Vuplex VR/AR 浏览器的...• 与Android插件不同,iOS插件不支持悬停交互、拖拽交互或WebGL。 https://assetstore.unity.com/packages/tools/gui/3d-webview-for-android-web-browser-137030?locale=zh-CN
《3D WebView for Android and iOS Web Browser 4.2.2-4.4.4:移动端3D渲染与Unity集成的深度解析》 在移动应用开发领域,为用户提供丰富的交互体验已经成为开发者的重要任务之一。3D WebView是这样一个工具,它...
在这个场景中,我们关注的是"3D WebView for Android and iOS Web Browser 4.2.2",这是一个专门针对Unity 3D的插件,旨在帮助开发者在游戏或应用中嵌入Web内容。 3D WebView插件的主要功能是将标准的HTML5网页集成...
3D WebView for Android and iOS Web Browser
3D WebView for Android and iOS Web Browser4.1
本文将深入探讨如何在Flutter项目中集成微信支付功能,支持Android和iOS两大主流操作系统。我们将重点关注以下几个关键知识点: 1. **Flutter插件开发**: Flutter插件是Flutter框架的核心组成部分之一,它允许...
《UMP Pro:Android与iOS平台的Unity视频流解决方案》 Unity引擎作为一个强大的跨平台游戏开发工具,被广泛应用于游戏开发、模拟应用以及多媒体项目。在移动设备上,无论是Android还是iOS,Unity都能提供流畅的游戏...
寻聊最新飞机即时通讯系统源码 PC+Android+IOS+WEB四端 经过测试 刚开始搭建可以发消息 过一会服务器就崩了 有些接口不太会对接 你们有能力自己拿去修复 环境Nginx+mysql5.7+php7.3+redis+jdk1.8+etcd、kafka、minio...
开发者可以使用同一套代码库,同时支持Android和iOS系统的应用开发,这极大地降低了维护成本和学习曲线。它基于Unity引擎,该引擎以其强大的3D图形处理能力和对多种平台的广泛支持而闻名。通过Unity,UMP Pro提供了...
本文将详细讲解如何使用`cordova-plugin-alipay`这个插件,以实现支付宝App支付功能在Android和iOS平台上的集成。该插件是基于Swift开发,方便开发者快速在Cordova应用中接入支付宝服务。 首先,`cordova-plugin-...
《Unity RTSP流媒体处理详解——基于UMP Pro Android iOS2.0.2》 在现代移动应用开发中,实时视频流传输技术占据了重要的地位,尤其是对于游戏和多媒体应用。Unity作为一个强大的跨平台游戏引擎,提供了丰富的功能...
跨平台(Android,iOS,web)的 IM 开源项目.zip,荣云Android sdk演示
使用与支持 Vuplex VR/AR 浏览器的...• 与Android插件不同,iOS插件不支持悬停交互、拖拽交互或WebGL。 https://assetstore.unity.com/packages/tools/gui/3d-webview-for-android-web-browser-137030?locale=zh-CN
unity 播放器插件,支持直播和点播 UMP Pro Android iOS 1.7.3 版本绝对真实,支持arm64