|
@@ -16,119 +16,30 @@ import com.jfinal.weixin.sdk.kit.PaymentKit;
|
|
|
import com.jfinal.weixin.sdk.utils.HttpUtils;
|
|
|
import com.jfinal.weixin.sdk.utils.JsonUtils;
|
|
|
|
|
|
-
|
|
|
public class WeixinPayController extends Controller {
|
|
|
|
|
|
- //商户相关资料
|
|
|
- private static String appid = "wx1f3dc2c37dce641b";
|
|
|
- private static String partner = "1503643261";
|
|
|
- private static String paternerKey = "9759a66938e8411ad5889e2b5b394d94";
|
|
|
- private static String notify_url = "https://wechat.pacsonline.cn/wx_patient/pay/pay_notify";
|
|
|
- private static String partner_jx = "1615037878";
|
|
|
- private static String paternerKey_jx = "9759a66938e8411ad5889e2b5b394d94";
|
|
|
-
|
|
|
-
|
|
|
+ // 商户相关资料
|
|
|
+ private static String appid = "wx1f3dc2c37dce641b";
|
|
|
+ private static String partner = "1503643261";
|
|
|
+ private static String paternerKey = "9759a66938e8411ad5889e2b5b394d94";
|
|
|
+ private static String notify_url = "https://wechat.pacsonline.cn/wx_patient/pay/pay_notify";
|
|
|
+ private static String partner_jx = "1615037878";
|
|
|
+ private static String paternerKey_jx = "9759a66938e8411ad5889e2b5b394d94";
|
|
|
|
|
|
- /**
|
|
|
- * 公众号支付js-sdk
|
|
|
- */
|
|
|
- public void index() {
|
|
|
- String institution_id = this.getPara("institution_id");
|
|
|
- if (institution_id == null || !institution_id.equals("03060002")) {String out_trade_no = this.getPara("out_trade_no");
|
|
|
- if (out_trade_no == null) {
|
|
|
- renderText("need out_trade_no");
|
|
|
- }
|
|
|
-// String appId = this.getPara("appId");
|
|
|
-// if (appId == null) {
|
|
|
-// renderText("need appId");
|
|
|
-// }
|
|
|
- String openid = this.getPara("openid");
|
|
|
- if (openid == null) {
|
|
|
- renderText("need openid");
|
|
|
- }
|
|
|
- String body = this.getPara("body");
|
|
|
- if (body == null) {
|
|
|
- renderText("need body");
|
|
|
- }
|
|
|
- String total_fee = this.getPara("total_fee");
|
|
|
- if (total_fee == null) {
|
|
|
- renderText("need total_fee");
|
|
|
- }
|
|
|
- String notify_url = this.getPara("notify_url");
|
|
|
- if (notify_url == null) {
|
|
|
- renderText("need notify_url");
|
|
|
- }
|
|
|
-
|
|
|
- ApiConfigKit.setThreadLocalAppId(appid);
|
|
|
-
|
|
|
- // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
|
|
|
-
|
|
|
- Map<String, String> params = new HashMap<String, String>();
|
|
|
- params.put("appid", appid);
|
|
|
- params.put("mch_id", partner);
|
|
|
- params.put("body", body);
|
|
|
- params.put("out_trade_no", out_trade_no);
|
|
|
- params.put("total_fee", total_fee);
|
|
|
-
|
|
|
- String ip = IpKit.getRealIp(getRequest());
|
|
|
- if (StrKit.isBlank(ip)) {
|
|
|
- ip = "127.0.0.1";
|
|
|
- }
|
|
|
- if (ip.contains(",")) {
|
|
|
- ip = ip.split(",")[0];
|
|
|
- }
|
|
|
-
|
|
|
- params.put("spbill_create_ip", ip);
|
|
|
- params.put("trade_type", TradeType.JSAPI.name());
|
|
|
- params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
- params.put("notify_url", notify_url);
|
|
|
- params.put("openid", openid);
|
|
|
-
|
|
|
- String sign = PaymentKit.createSign(params, paternerKey);
|
|
|
- params.put("sign", sign);
|
|
|
- String xmlResult = PaymentApi.pushOrder(params);
|
|
|
-
|
|
|
- System.out.println(xmlResult);
|
|
|
-
|
|
|
- Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
-
|
|
|
- String return_code = result.get("return_code");
|
|
|
- String return_msg = result.get("return_msg");
|
|
|
- if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
- renderText(xmlResult);
|
|
|
- return;
|
|
|
- }
|
|
|
- String result_code = result.get("result_code");
|
|
|
- if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
- renderText(xmlResult);
|
|
|
- return;
|
|
|
- }
|
|
|
- // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
- String prepay_id = result.get("prepay_id");
|
|
|
-
|
|
|
- Map<String, String> packageParams = new HashMap<String, String>();
|
|
|
- packageParams.put("appId", appid);
|
|
|
- packageParams.put("timeStamp", System.currentTimeMillis() / 1000 + "");
|
|
|
- packageParams.put("nonceStr", System.currentTimeMillis() + "");
|
|
|
- packageParams.put("package", "prepay_id=" + prepay_id);
|
|
|
- packageParams.put("signType", "MD5");
|
|
|
- String packageSign = PaymentKit.createSign(packageParams, paternerKey);
|
|
|
- packageParams.put("paySign", packageSign);
|
|
|
-
|
|
|
- String jsonStr = JsonUtils.toJson(packageParams);
|
|
|
- setAttr("json", jsonStr);
|
|
|
- System.out.println(jsonStr);
|
|
|
-// renderJson("{\"code\":0}");
|
|
|
- renderText(jsonStr);
|
|
|
- }else if (institution_id.equals("03060002")) {
|
|
|
+ /**
|
|
|
+ * 公众号支付js-sdk
|
|
|
+ */
|
|
|
+ public void index() {
|
|
|
+// String institution_id = this.getPara("institution_id");
|
|
|
+// if (institution_id == null || !institution_id.equals("03060002")) {
|
|
|
String out_trade_no = this.getPara("out_trade_no");
|
|
|
if (out_trade_no == null) {
|
|
|
renderText("need out_trade_no");
|
|
|
}
|
|
|
-// String appId = this.getPara("appId");
|
|
|
-// if (appId == null) {
|
|
|
-// renderText("need appId");
|
|
|
-// }
|
|
|
+// String appId = this.getPara("appId");
|
|
|
+// if (appId == null) {
|
|
|
+// renderText("need appId");
|
|
|
+// }
|
|
|
String openid = this.getPara("openid");
|
|
|
if (openid == null) {
|
|
|
renderText("need openid");
|
|
@@ -145,453 +56,535 @@ public class WeixinPayController extends Controller {
|
|
|
if (notify_url == null) {
|
|
|
renderText("need notify_url");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
ApiConfigKit.setThreadLocalAppId(appid);
|
|
|
|
|
|
- // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
|
|
|
-
|
|
|
- Map<String, String> params = new HashMap<String, String>();
|
|
|
- params.put("appid", appid);
|
|
|
- params.put("mch_id", partner_jx);
|
|
|
- params.put("body", body);
|
|
|
- params.put("out_trade_no", out_trade_no);
|
|
|
- params.put("total_fee", total_fee);
|
|
|
-
|
|
|
- String ip = IpKit.getRealIp(getRequest());
|
|
|
- if (StrKit.isBlank(ip)) {
|
|
|
- ip = "127.0.0.1";
|
|
|
- }
|
|
|
- if (ip.contains(",")) {
|
|
|
- ip = ip.split(",")[0];
|
|
|
- }
|
|
|
-
|
|
|
- params.put("spbill_create_ip", ip);
|
|
|
- params.put("trade_type", TradeType.JSAPI.name());
|
|
|
- params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
- params.put("notify_url", notify_url);
|
|
|
- params.put("openid", openid);
|
|
|
-
|
|
|
- String sign = PaymentKit.createSign(params, paternerKey_jx);
|
|
|
- params.put("sign", sign);
|
|
|
- String xmlResult = PaymentApi.pushOrder(params);
|
|
|
-
|
|
|
- System.out.println(xmlResult);
|
|
|
-
|
|
|
- Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
-
|
|
|
- String return_code = result.get("return_code");
|
|
|
- String return_msg = result.get("return_msg");
|
|
|
- if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
- renderText(xmlResult);
|
|
|
- return;
|
|
|
- }
|
|
|
- String result_code = result.get("result_code");
|
|
|
- if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
- renderText(xmlResult);
|
|
|
- return;
|
|
|
- }
|
|
|
- // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
- String prepay_id = result.get("prepay_id");
|
|
|
-
|
|
|
- Map<String, String> packageParams = new HashMap<String, String>();
|
|
|
- packageParams.put("appId", appid);
|
|
|
- packageParams.put("timeStamp", System.currentTimeMillis() / 1000 + "");
|
|
|
- packageParams.put("nonceStr", System.currentTimeMillis() + "");
|
|
|
- packageParams.put("package", "prepay_id=" + prepay_id);
|
|
|
- packageParams.put("signType", "MD5");
|
|
|
- String packageSign = PaymentKit.createSign(packageParams, paternerKey_jx);
|
|
|
- packageParams.put("paySign", packageSign);
|
|
|
-
|
|
|
- String jsonStr = JsonUtils.toJson(packageParams);
|
|
|
- setAttr("json", jsonStr);
|
|
|
- System.out.println(jsonStr);
|
|
|
-// renderJson("{\"code\":0}");
|
|
|
- renderText(jsonStr);
|
|
|
+ // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
|
|
|
+
|
|
|
+ Map<String, String> params = new HashMap<String, String>();
|
|
|
+ params.put("appid", appid);
|
|
|
+ params.put("mch_id", partner);
|
|
|
+ params.put("body", body);
|
|
|
+ params.put("out_trade_no", out_trade_no);
|
|
|
+ params.put("total_fee", total_fee);
|
|
|
+
|
|
|
+ String ip = IpKit.getRealIp(getRequest());
|
|
|
+ if (StrKit.isBlank(ip)) {
|
|
|
+ ip = "127.0.0.1";
|
|
|
+ }
|
|
|
+ if (ip.contains(",")) {
|
|
|
+ ip = ip.split(",")[0];
|
|
|
+ }
|
|
|
+
|
|
|
+ params.put("spbill_create_ip", ip);
|
|
|
+ params.put("trade_type", TradeType.JSAPI.name());
|
|
|
+ params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
+ params.put("notify_url", notify_url);
|
|
|
+ params.put("openid", openid);
|
|
|
+
|
|
|
+ String sign = PaymentKit.createSign(params, paternerKey);
|
|
|
+ params.put("sign", sign);
|
|
|
+ String xmlResult = PaymentApi.pushOrder(params);
|
|
|
+
|
|
|
+ System.out.println(xmlResult);
|
|
|
+
|
|
|
+ Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
+
|
|
|
+ String return_code = result.get("return_code");
|
|
|
+ String return_msg = result.get("return_msg");
|
|
|
+ if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
+ renderText(xmlResult);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String result_code = result.get("result_code");
|
|
|
+ if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
+ renderText(xmlResult);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
+ String prepay_id = result.get("prepay_id");
|
|
|
+
|
|
|
+ Map<String, String> packageParams = new HashMap<String, String>();
|
|
|
+ packageParams.put("appId", appid);
|
|
|
+ packageParams.put("timeStamp", System.currentTimeMillis() / 1000 + "");
|
|
|
+ packageParams.put("nonceStr", System.currentTimeMillis() + "");
|
|
|
+ packageParams.put("package", "prepay_id=" + prepay_id);
|
|
|
+ packageParams.put("signType", "MD5");
|
|
|
+ String packageSign = PaymentKit.createSign(packageParams, paternerKey);
|
|
|
+ packageParams.put("paySign", packageSign);
|
|
|
+
|
|
|
+ String jsonStr = JsonUtils.toJson(packageParams);
|
|
|
+ setAttr("json", jsonStr);
|
|
|
+ System.out.println(jsonStr);
|
|
|
+// renderJson("{\"code\":0}");
|
|
|
+ renderText(jsonStr);
|
|
|
+// } else if (institution_id.equals("03060002")) {
|
|
|
+// String out_trade_no = this.getPara("out_trade_no");
|
|
|
+// if (out_trade_no == null) {
|
|
|
+// renderText("need out_trade_no");
|
|
|
+// }
|
|
|
+//// String appId = this.getPara("appId");
|
|
|
+//// if (appId == null) {
|
|
|
+//// renderText("need appId");
|
|
|
+//// }
|
|
|
+// String openid = this.getPara("openid");
|
|
|
+// if (openid == null) {
|
|
|
+// renderText("need openid");
|
|
|
+// }
|
|
|
+// String body = this.getPara("body");
|
|
|
+// if (body == null) {
|
|
|
+// renderText("need body");
|
|
|
+// }
|
|
|
+// String total_fee = this.getPara("total_fee");
|
|
|
+// if (total_fee == null) {
|
|
|
+// renderText("need total_fee");
|
|
|
+// }
|
|
|
+// String notify_url = this.getPara("notify_url");
|
|
|
+// if (notify_url == null) {
|
|
|
+// renderText("need notify_url");
|
|
|
+// }
|
|
|
+//
|
|
|
+// ApiConfigKit.setThreadLocalAppId(appid);
|
|
|
+//
|
|
|
+// // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
|
|
|
+//
|
|
|
+// Map<String, String> params = new HashMap<String, String>();
|
|
|
+// params.put("appid", appid);
|
|
|
+// params.put("mch_id", partner_jx);
|
|
|
+// params.put("body", body);
|
|
|
+// params.put("out_trade_no", out_trade_no);
|
|
|
+// params.put("total_fee", total_fee);
|
|
|
+//
|
|
|
+// String ip = IpKit.getRealIp(getRequest());
|
|
|
+// if (StrKit.isBlank(ip)) {
|
|
|
+// ip = "127.0.0.1";
|
|
|
+// }
|
|
|
+// if (ip.contains(",")) {
|
|
|
+// ip = ip.split(",")[0];
|
|
|
+// }
|
|
|
+//
|
|
|
+// params.put("spbill_create_ip", ip);
|
|
|
+// params.put("trade_type", TradeType.JSAPI.name());
|
|
|
+// params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
+// params.put("notify_url", notify_url);
|
|
|
+// params.put("openid", openid);
|
|
|
+//
|
|
|
+// String sign = PaymentKit.createSign(params, paternerKey_jx);
|
|
|
+// params.put("sign", sign);
|
|
|
+// String xmlResult = PaymentApi.pushOrder(params);
|
|
|
+//
|
|
|
+// System.out.println(xmlResult);
|
|
|
+//
|
|
|
+// Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
+//
|
|
|
+// String return_code = result.get("return_code");
|
|
|
+// String return_msg = result.get("return_msg");
|
|
|
+// if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
+// renderText(xmlResult);
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// String result_code = result.get("result_code");
|
|
|
+// if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
+// renderText(xmlResult);
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
+// String prepay_id = result.get("prepay_id");
|
|
|
+//
|
|
|
+// Map<String, String> packageParams = new HashMap<String, String>();
|
|
|
+// packageParams.put("appId", appid);
|
|
|
+// packageParams.put("timeStamp", System.currentTimeMillis() / 1000 + "");
|
|
|
+// packageParams.put("nonceStr", System.currentTimeMillis() + "");
|
|
|
+// packageParams.put("package", "prepay_id=" + prepay_id);
|
|
|
+// packageParams.put("signType", "MD5");
|
|
|
+// String packageSign = PaymentKit.createSign(packageParams, paternerKey_jx);
|
|
|
+// packageParams.put("paySign", packageSign);
|
|
|
+//
|
|
|
+// String jsonStr = JsonUtils.toJson(packageParams);
|
|
|
+// setAttr("json", jsonStr);
|
|
|
+// System.out.println(jsonStr);
|
|
|
+//// renderJson("{\"code\":0}");
|
|
|
+// renderText(jsonStr);
|
|
|
+// }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 支付成功通知
|
|
|
+ */
|
|
|
+ public void pay_notify() {
|
|
|
+ // 支付结果通用通知文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
|
|
|
+ String xmlMsg = HttpKit.readData(getRequest());
|
|
|
+ System.out.println("支付通知=" + xmlMsg);
|
|
|
+ Map<String, String> params = PaymentKit.xmlToMap(xmlMsg);
|
|
|
+
|
|
|
+ String result_code = params.get("result_code");
|
|
|
+ // 总金额
|
|
|
+ String totalFee = params.get("total_fee");
|
|
|
+ // 商户订单号
|
|
|
+ String orderId = params.get("out_trade_no");
|
|
|
+ // 微信支付订单号
|
|
|
+ String transId = params.get("transaction_id");
|
|
|
+ // 支付完成时间,格式为yyyyMMddHHmmss
|
|
|
+ String timeEnd = params.get("time_end");
|
|
|
+
|
|
|
+ // 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
|
|
|
+ // 避免已经成功、关闭、退款的订单被再次更新
|
|
|
+
|
|
|
+ if (PaymentKit.verifyNotify(params, paternerKey)) {
|
|
|
+ if (("SUCCESS").equals(result_code)) {
|
|
|
+ // 更新订单信息
|
|
|
+ System.out.println("更新订单信息");
|
|
|
+
|
|
|
+ Map<String, String> xml = new HashMap<String, String>();
|
|
|
+ xml.put("return_code", "SUCCESS");
|
|
|
+ xml.put("return_msg", "OK");
|
|
|
+ renderText(PaymentKit.toXml(xml));
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 支付成功通知
|
|
|
- */
|
|
|
- public void pay_notify() {
|
|
|
- // 支付结果通用通知文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
|
|
|
- String xmlMsg = HttpKit.readData(getRequest());
|
|
|
- System.out.println("支付通知="+xmlMsg);
|
|
|
- Map<String, String> params = PaymentKit.xmlToMap(xmlMsg);
|
|
|
-
|
|
|
- String result_code = params.get("result_code");
|
|
|
- // 总金额
|
|
|
- String totalFee = params.get("total_fee");
|
|
|
- // 商户订单号
|
|
|
- String orderId = params.get("out_trade_no");
|
|
|
- // 微信支付订单号
|
|
|
- String transId = params.get("transaction_id");
|
|
|
- // 支付完成时间,格式为yyyyMMddHHmmss
|
|
|
- String timeEnd = params.get("time_end");
|
|
|
-
|
|
|
- // 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
|
|
|
- // 避免已经成功、关闭、退款的订单被再次更新
|
|
|
-
|
|
|
- if(PaymentKit.verifyNotify(params, paternerKey)){
|
|
|
- if (("SUCCESS").equals(result_code)) {
|
|
|
- //更新订单信息
|
|
|
- System.out.println("更新订单信息");
|
|
|
-
|
|
|
- Map<String, String> xml = new HashMap<String, String>();
|
|
|
- xml.put("return_code", "SUCCESS");
|
|
|
- xml.put("return_msg", "OK");
|
|
|
- renderText(PaymentKit.toXml(xml));
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- renderText("");
|
|
|
- }
|
|
|
- /**
|
|
|
- *
|
|
|
- * @author Javen
|
|
|
- * 2016年5月14日
|
|
|
- * PC扫码支付获取二维码(模式一)
|
|
|
- */
|
|
|
- @NotAction
|
|
|
- public String getCodeUrl(String productId){
|
|
|
- String url="weixin://wxpay/bizpayurl?sign=%s&appid=%s&mch_id=%s&product_id=%s&time_stamp=%s&nonce_str=%s";
|
|
|
-
|
|
|
- String timeStamp=Long.toString(System.currentTimeMillis() / 1000);
|
|
|
- String nonceStr=Long.toString(System.currentTimeMillis());
|
|
|
- Map<String, String> packageParams = new HashMap<String, String>();
|
|
|
- packageParams.put("appid", appid);
|
|
|
- packageParams.put("mch_id", partner);
|
|
|
- packageParams.put("product_id", productId);
|
|
|
- packageParams.put("time_stamp", timeStamp);
|
|
|
- packageParams.put("nonce_str", nonceStr);
|
|
|
- String packageSign = PaymentKit.createSign(packageParams, paternerKey);
|
|
|
-
|
|
|
- return String.format(url, packageSign, appid, partner, productId, timeStamp, nonceStr);
|
|
|
- }
|
|
|
-
|
|
|
- public void test(){
|
|
|
- String product_id = "001";
|
|
|
- renderText(getCodeUrl(product_id));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @author Javen
|
|
|
- * 2016年5月14日
|
|
|
- * PC扫码支付回调(模式一)
|
|
|
- */
|
|
|
- public void wxpay(){
|
|
|
- String result = HttpKit.readData(getRequest());
|
|
|
- System.out.println("回调结果="+result);
|
|
|
- /**
|
|
|
- * 获取返回的信息内容中各个参数的值
|
|
|
- */
|
|
|
- Map<String, String> map = PaymentKit.xmlToMap(result);
|
|
|
- for (String key : map.keySet()) {
|
|
|
- System.out.println("key= "+ key + " and value= " + map.get(key));
|
|
|
- }
|
|
|
-
|
|
|
- String appid=map.get("appid");
|
|
|
- String openid = map.get("openid");
|
|
|
- String mch_id = map.get("mch_id");
|
|
|
- String is_subscribe = map.get("is_subscribe");
|
|
|
- String nonce_str = map.get("nonce_str");
|
|
|
- String product_id = map.get("product_id");
|
|
|
- String sign = map.get("sign");
|
|
|
- Map<String, String> packageParams = new HashMap<String, String>();
|
|
|
- packageParams.put("appid", appid);
|
|
|
- packageParams.put("openid", openid);
|
|
|
- packageParams.put("mch_id",mch_id);
|
|
|
- packageParams.put("is_subscribe",is_subscribe);
|
|
|
- packageParams.put("nonce_str",nonce_str);
|
|
|
- packageParams.put("product_id", product_id);
|
|
|
-
|
|
|
- String packageSign = PaymentKit.createSign(packageParams, paternerKey);
|
|
|
- if (sign.equals(packageSign)) {
|
|
|
- // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
|
|
|
-
|
|
|
- Map<String, String> params = new HashMap<String, String>();
|
|
|
- params.put("appid", appid);
|
|
|
- params.put("mch_id", mch_id);
|
|
|
- params.put("body", "测试扫码支付");
|
|
|
- String out_trade_no=Long.toString(System.currentTimeMillis());
|
|
|
- params.put("out_trade_no", out_trade_no);
|
|
|
- int price=((int)(Float.valueOf(10)*100));
|
|
|
- params.put("total_fee", price+"");
|
|
|
- params.put("attach", out_trade_no);
|
|
|
-
|
|
|
- String ip = IpKit.getRealIp(getRequest());
|
|
|
- if (StrKit.isBlank(ip)) {
|
|
|
- ip = "127.0.0.1";
|
|
|
- }
|
|
|
-
|
|
|
- params.put("spbill_create_ip", ip);
|
|
|
- params.put("trade_type", TradeType.NATIVE.name());
|
|
|
- params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
- params.put("notify_url", notify_url);
|
|
|
- params.put("openid", openid);
|
|
|
-
|
|
|
- String paysign = PaymentKit.createSign(params, paternerKey);
|
|
|
- params.put("sign", paysign);
|
|
|
-
|
|
|
- String xmlResult = PaymentApi.pushOrder(params);
|
|
|
-
|
|
|
- System.out.println("prepay_xml>>>"+xmlResult);
|
|
|
- Map<String, String> payResult = PaymentKit.xmlToMap(xmlResult);
|
|
|
-
|
|
|
- String return_code = payResult.get("return_code");
|
|
|
- String return_msg = payResult.get("return_msg");
|
|
|
-
|
|
|
- if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
- System.out.println("return_code>>>"+return_msg);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (StrKit.isBlank(return_msg) || !"OK".equals(return_msg)) {
|
|
|
- System.out.println("return_msg>>>>"+return_msg);
|
|
|
- return;
|
|
|
- }
|
|
|
- // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
- String prepay_id = payResult.get("prepay_id");
|
|
|
-
|
|
|
- Map<String, String> prepayParams = new HashMap<String, String>();
|
|
|
- prepayParams.put("return_code", "SUCCESS");
|
|
|
- prepayParams.put("appId", appid);
|
|
|
- prepayParams.put("mch_id", mch_id);
|
|
|
- prepayParams.put("nonceStr", System.currentTimeMillis() + "");
|
|
|
- prepayParams.put("prepay_id", prepay_id);
|
|
|
- prepayParams.put("result_code", "SUCCESS");
|
|
|
- String prepaySign = PaymentKit.createSign(prepayParams, paternerKey);
|
|
|
- prepayParams.put("sign", prepaySign);
|
|
|
- String xml = PaymentKit.toXml(prepayParams);
|
|
|
-
|
|
|
- System.out.println(xml);
|
|
|
-
|
|
|
- renderText(xml);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 刷卡支付
|
|
|
- * 文档:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1
|
|
|
+ renderText("");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @author Javen 2016年5月14日 PC扫码支付获取二维码(模式一)
|
|
|
+ */
|
|
|
+ @NotAction
|
|
|
+ public String getCodeUrl(String productId) {
|
|
|
+ String url = "weixin://wxpay/bizpayurl?sign=%s&appid=%s&mch_id=%s&product_id=%s&time_stamp=%s&nonce_str=%s";
|
|
|
+
|
|
|
+ String timeStamp = Long.toString(System.currentTimeMillis() / 1000);
|
|
|
+ String nonceStr = Long.toString(System.currentTimeMillis());
|
|
|
+ Map<String, String> packageParams = new HashMap<String, String>();
|
|
|
+ packageParams.put("appid", appid);
|
|
|
+ packageParams.put("mch_id", partner);
|
|
|
+ packageParams.put("product_id", productId);
|
|
|
+ packageParams.put("time_stamp", timeStamp);
|
|
|
+ packageParams.put("nonce_str", nonceStr);
|
|
|
+ String packageSign = PaymentKit.createSign(packageParams, paternerKey);
|
|
|
+
|
|
|
+ return String.format(url, packageSign, appid, partner, productId, timeStamp, nonceStr);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void test() {
|
|
|
+ String product_id = "001";
|
|
|
+ renderText(getCodeUrl(product_id));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @author Javen 2016年5月14日 PC扫码支付回调(模式一)
|
|
|
*/
|
|
|
- public void micropay(){
|
|
|
- String url="https://api.mch.weixin.qq.com/pay/micropay";
|
|
|
-
|
|
|
- String total_fee="1";
|
|
|
- String auth_code = getPara("auth_code");//测试时直接手动输入刷卡页面上的18位数字
|
|
|
-
|
|
|
+ public void wxpay() {
|
|
|
+ String result = HttpKit.readData(getRequest());
|
|
|
+ System.out.println("回调结果=" + result);
|
|
|
+ /**
|
|
|
+ * 获取返回的信息内容中各个参数的值
|
|
|
+ */
|
|
|
+ Map<String, String> map = PaymentKit.xmlToMap(result);
|
|
|
+ for (String key : map.keySet()) {
|
|
|
+ System.out.println("key= " + key + " and value= " + map.get(key));
|
|
|
+ }
|
|
|
+
|
|
|
+ String appid = map.get("appid");
|
|
|
+ String openid = map.get("openid");
|
|
|
+ String mch_id = map.get("mch_id");
|
|
|
+ String is_subscribe = map.get("is_subscribe");
|
|
|
+ String nonce_str = map.get("nonce_str");
|
|
|
+ String product_id = map.get("product_id");
|
|
|
+ String sign = map.get("sign");
|
|
|
+ Map<String, String> packageParams = new HashMap<String, String>();
|
|
|
+ packageParams.put("appid", appid);
|
|
|
+ packageParams.put("openid", openid);
|
|
|
+ packageParams.put("mch_id", mch_id);
|
|
|
+ packageParams.put("is_subscribe", is_subscribe);
|
|
|
+ packageParams.put("nonce_str", nonce_str);
|
|
|
+ packageParams.put("product_id", product_id);
|
|
|
+
|
|
|
+ String packageSign = PaymentKit.createSign(packageParams, paternerKey);
|
|
|
+ if (sign.equals(packageSign)) {
|
|
|
+ // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
|
|
|
+
|
|
|
+ Map<String, String> params = new HashMap<String, String>();
|
|
|
+ params.put("appid", appid);
|
|
|
+ params.put("mch_id", mch_id);
|
|
|
+ params.put("body", "测试扫码支付");
|
|
|
+ String out_trade_no = Long.toString(System.currentTimeMillis());
|
|
|
+ params.put("out_trade_no", out_trade_no);
|
|
|
+ int price = ((int) (Float.valueOf(10) * 100));
|
|
|
+ params.put("total_fee", price + "");
|
|
|
+ params.put("attach", out_trade_no);
|
|
|
+
|
|
|
+ String ip = IpKit.getRealIp(getRequest());
|
|
|
+ if (StrKit.isBlank(ip)) {
|
|
|
+ ip = "127.0.0.1";
|
|
|
+ }
|
|
|
+
|
|
|
+ params.put("spbill_create_ip", ip);
|
|
|
+ params.put("trade_type", TradeType.NATIVE.name());
|
|
|
+ params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
+ params.put("notify_url", notify_url);
|
|
|
+ params.put("openid", openid);
|
|
|
+
|
|
|
+ String paysign = PaymentKit.createSign(params, paternerKey);
|
|
|
+ params.put("sign", paysign);
|
|
|
+
|
|
|
+ String xmlResult = PaymentApi.pushOrder(params);
|
|
|
+
|
|
|
+ System.out.println("prepay_xml>>>" + xmlResult);
|
|
|
+ Map<String, String> payResult = PaymentKit.xmlToMap(xmlResult);
|
|
|
+
|
|
|
+ String return_code = payResult.get("return_code");
|
|
|
+ String return_msg = payResult.get("return_msg");
|
|
|
+
|
|
|
+ if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
+ System.out.println("return_code>>>" + return_msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (StrKit.isBlank(return_msg) || !"OK".equals(return_msg)) {
|
|
|
+ System.out.println("return_msg>>>>" + return_msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
+ String prepay_id = payResult.get("prepay_id");
|
|
|
+
|
|
|
+ Map<String, String> prepayParams = new HashMap<String, String>();
|
|
|
+ prepayParams.put("return_code", "SUCCESS");
|
|
|
+ prepayParams.put("appId", appid);
|
|
|
+ prepayParams.put("mch_id", mch_id);
|
|
|
+ prepayParams.put("nonceStr", System.currentTimeMillis() + "");
|
|
|
+ prepayParams.put("prepay_id", prepay_id);
|
|
|
+ prepayParams.put("result_code", "SUCCESS");
|
|
|
+ String prepaySign = PaymentKit.createSign(prepayParams, paternerKey);
|
|
|
+ prepayParams.put("sign", prepaySign);
|
|
|
+ String xml = PaymentKit.toXml(prepayParams);
|
|
|
+
|
|
|
+ System.out.println(xml);
|
|
|
+
|
|
|
+ renderText(xml);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 刷卡支付 文档:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=5_1
|
|
|
+ */
|
|
|
+ public void micropay() {
|
|
|
+ String url = "https://api.mch.weixin.qq.com/pay/micropay";
|
|
|
+
|
|
|
+ String total_fee = "1";
|
|
|
+ String auth_code = getPara("auth_code");// 测试时直接手动输入刷卡页面上的18位数字
|
|
|
+
|
|
|
Map<String, String> params = new HashMap<String, String>();
|
|
|
params.put("appid", appid);
|
|
|
params.put("mch_id", partner);
|
|
|
- params.put("device_info", "javen205");//终端设备号
|
|
|
+ params.put("device_info", "javen205");// 终端设备号
|
|
|
params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
params.put("body", "刷卡支付测试");
|
|
|
// params.put("detail", "json字符串");//非必须
|
|
|
- params.put("attach", "javen205");//附加参数非必须
|
|
|
- String out_trade_no=System.currentTimeMillis()+"";
|
|
|
+ params.put("attach", "javen205");// 附加参数非必须
|
|
|
+ String out_trade_no = System.currentTimeMillis() + "";
|
|
|
params.put("out_trade_no", out_trade_no);
|
|
|
params.put("total_fee", total_fee);
|
|
|
-
|
|
|
+
|
|
|
String ip = IpKit.getRealIp(getRequest());
|
|
|
if (StrKit.isBlank(ip)) {
|
|
|
ip = "127.0.0.1";
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
params.put("spbill_create_ip", ip);
|
|
|
params.put("auth_code", auth_code);
|
|
|
-
|
|
|
+
|
|
|
String sign = PaymentKit.createSign(params, paternerKey);
|
|
|
params.put("sign", sign);
|
|
|
-
|
|
|
+
|
|
|
String xmlResult = HttpUtils.post(url, PaymentKit.toXml(params));
|
|
|
- //同步返回结果
|
|
|
- System.out.println("xmlResult:"+xmlResult);
|
|
|
-
|
|
|
+ // 同步返回结果
|
|
|
+ System.out.println("xmlResult:" + xmlResult);
|
|
|
+
|
|
|
Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
String return_code = result.get("return_code");
|
|
|
if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
- //通讯失败
|
|
|
+ // 通讯失败
|
|
|
String err_code = result.get("err_code");
|
|
|
- //用户支付中,需要输入密码
|
|
|
+ // 用户支付中,需要输入密码
|
|
|
if (err_code.equals("USERPAYING")) {
|
|
|
- //等待5秒后调用【查询订单API】https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_2
|
|
|
-
|
|
|
+ // 等待5秒后调用【查询订单API】https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_2
|
|
|
+
|
|
|
}
|
|
|
- renderText("通讯失败>>"+xmlResult);
|
|
|
+ renderText("通讯失败>>" + xmlResult);
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
String result_code = result.get("result_code");
|
|
|
if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
- //支付失败
|
|
|
- renderText("支付失败>>"+xmlResult);
|
|
|
+ // 支付失败
|
|
|
+ renderText("支付失败>>" + xmlResult);
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- //支付成功 返回参会入库 业务逻辑处理
|
|
|
-
|
|
|
+
|
|
|
+ // 支付成功 返回参会入库 业务逻辑处理
|
|
|
+
|
|
|
renderText(xmlResult);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * PC支付模式二,PC支付不需要openid
|
|
|
- */
|
|
|
- public void pcModeTwo() {
|
|
|
- // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
|
|
|
- Map<String, String> params = new HashMap<String, String>();
|
|
|
- params.put("appid", appid);
|
|
|
- params.put("mch_id", partner);
|
|
|
- params.put("body", "JFinal2.2极速开发");
|
|
|
-
|
|
|
- // 商品ID trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
|
|
|
- params.put("product_id", "1");
|
|
|
- // 商户订单号 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
|
|
|
- params.put("out_trade_no", "97777368222");
|
|
|
- params.put("total_fee", "1");
|
|
|
-
|
|
|
- String ip = IpKit.getRealIp(getRequest());
|
|
|
- if (StrKit.isBlank(ip)) {
|
|
|
- ip = "127.0.0.1";
|
|
|
- }
|
|
|
-
|
|
|
- params.put("spbill_create_ip", ip);
|
|
|
- params.put("trade_type", TradeType.NATIVE.name());
|
|
|
- params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
- params.put("notify_url", notify_url);
|
|
|
-
|
|
|
- String sign = PaymentKit.createSign(params, paternerKey);
|
|
|
- params.put("sign", sign);
|
|
|
- String xmlResult = PaymentApi.pushOrder(params);
|
|
|
-
|
|
|
- System.out.println(xmlResult);
|
|
|
- Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
-
|
|
|
- String return_code = result.get("return_code");
|
|
|
- String return_msg = result.get("return_msg");
|
|
|
- if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
- renderText(return_msg);
|
|
|
- return;
|
|
|
- }
|
|
|
- String result_code = result.get("result_code");
|
|
|
- if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
- renderText(return_msg);
|
|
|
- return;
|
|
|
- }
|
|
|
- // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
- String prepay_id = result.get("prepay_id");
|
|
|
- // trade_type为NATIVE是有返回,可将该参数值生成二维码展示出来进行扫码支付
|
|
|
- String code_url = result.get("code_url");
|
|
|
-
|
|
|
- setAttr("code_url", code_url);
|
|
|
- render("/jsp/pc_pay.jsp");
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * wap支付第一版本
|
|
|
- */
|
|
|
- public void wap1() {
|
|
|
- Map<String, String> params = new HashMap<String, String>();
|
|
|
- params.put("appid", appid);
|
|
|
- params.put("mch_id", partner);
|
|
|
- params.put("body", "JFinal2.0极速开发");
|
|
|
- params.put("out_trade_no", "977773682111");
|
|
|
- params.put("total_fee", "1");
|
|
|
-
|
|
|
- String ip = IpKit.getRealIp(getRequest());
|
|
|
- if (StrKit.isBlank(ip)) {
|
|
|
- ip = "127.0.0.1";
|
|
|
- }
|
|
|
-
|
|
|
- params.put("spbill_create_ip", ip);
|
|
|
- params.put("trade_type", TradeType.WAP.name());
|
|
|
- params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
- params.put("notify_url", notify_url);
|
|
|
-
|
|
|
- String sign = PaymentKit.createSign(params, paternerKey);
|
|
|
- params.put("sign", sign);
|
|
|
- String xmlResult = PaymentApi.pushOrder(params);
|
|
|
-
|
|
|
- System.out.println(xmlResult);
|
|
|
- Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
-
|
|
|
- String return_code = result.get("return_code");
|
|
|
- String return_msg = result.get("return_msg");
|
|
|
- if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
- renderText(return_msg);
|
|
|
- return;
|
|
|
- }
|
|
|
- String result_code = result.get("result_code");
|
|
|
- if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
- renderText(return_msg);
|
|
|
- return;
|
|
|
- }
|
|
|
- // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
- String prepayId = result.get("prepay_id");
|
|
|
- String url = PaymentApi.getDeepLink(appid, prepayId, paternerKey);
|
|
|
-
|
|
|
- // 微信那边的开发建议用a标签打开该链接
|
|
|
- setAttr("url", url);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * wap支付第二版
|
|
|
- */
|
|
|
- public void wap2() {
|
|
|
- Map<String, String> params = new HashMap<String, String>();
|
|
|
- params.put("appid", appid);
|
|
|
- params.put("mch_id", partner);
|
|
|
- params.put("body", "JFinal2.0极速开发");
|
|
|
- params.put("out_trade_no", "977773682111");
|
|
|
- params.put("total_fee", "1");
|
|
|
-
|
|
|
- String ip = IpKit.getRealIp(getRequest());
|
|
|
- if (StrKit.isBlank(ip)) {
|
|
|
- ip = "127.0.0.1";
|
|
|
- }
|
|
|
-
|
|
|
- params.put("spbill_create_ip", ip);
|
|
|
- params.put("trade_type", TradeType.MWEB.name());
|
|
|
- params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
- params.put("notify_url", notify_url);
|
|
|
-
|
|
|
- String sign = PaymentKit.createSign(params, paternerKey);
|
|
|
- params.put("sign", sign);
|
|
|
- String xmlResult = PaymentApi.pushOrder(params);
|
|
|
-
|
|
|
- System.out.println(xmlResult);
|
|
|
- Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
-
|
|
|
- String return_code = result.get("return_code");
|
|
|
- String return_msg = result.get("return_msg");
|
|
|
- if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
- renderText(return_msg);
|
|
|
- return;
|
|
|
- }
|
|
|
- String result_code = result.get("result_code");
|
|
|
- if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
- renderText(return_msg);
|
|
|
- return;
|
|
|
- }
|
|
|
- // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
- String url = result.get("mweb_url");
|
|
|
-
|
|
|
- // 微信那边的开发建议用a标签打开该链接
|
|
|
- setAttr("url", url);
|
|
|
- }
|
|
|
-
|
|
|
- public String getParamByUrl(String url, String name) {
|
|
|
- url += "&";
|
|
|
- String pattern = "(\\?|&){1}#{0,1}" + name + "=[a-zA-Z0-9]*(&{1})";
|
|
|
-
|
|
|
- Pattern r = Pattern.compile(pattern);
|
|
|
-
|
|
|
- Matcher m = r.matcher(url);
|
|
|
- if (m.find( )) {
|
|
|
+ /**
|
|
|
+ * PC支付模式二,PC支付不需要openid
|
|
|
+ */
|
|
|
+ public void pcModeTwo() {
|
|
|
+ // 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
|
|
|
+ Map<String, String> params = new HashMap<String, String>();
|
|
|
+ params.put("appid", appid);
|
|
|
+ params.put("mch_id", partner);
|
|
|
+ params.put("body", "JFinal2.2极速开发");
|
|
|
+
|
|
|
+ // 商品ID trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
|
|
|
+ params.put("product_id", "1");
|
|
|
+ // 商户订单号 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
|
|
|
+ params.put("out_trade_no", "97777368222");
|
|
|
+ params.put("total_fee", "1");
|
|
|
+
|
|
|
+ String ip = IpKit.getRealIp(getRequest());
|
|
|
+ if (StrKit.isBlank(ip)) {
|
|
|
+ ip = "127.0.0.1";
|
|
|
+ }
|
|
|
+
|
|
|
+ params.put("spbill_create_ip", ip);
|
|
|
+ params.put("trade_type", TradeType.NATIVE.name());
|
|
|
+ params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
+ params.put("notify_url", notify_url);
|
|
|
+
|
|
|
+ String sign = PaymentKit.createSign(params, paternerKey);
|
|
|
+ params.put("sign", sign);
|
|
|
+ String xmlResult = PaymentApi.pushOrder(params);
|
|
|
+
|
|
|
+ System.out.println(xmlResult);
|
|
|
+ Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
+
|
|
|
+ String return_code = result.get("return_code");
|
|
|
+ String return_msg = result.get("return_msg");
|
|
|
+ if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
+ renderText(return_msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String result_code = result.get("result_code");
|
|
|
+ if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
+ renderText(return_msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
+ String prepay_id = result.get("prepay_id");
|
|
|
+ // trade_type为NATIVE是有返回,可将该参数值生成二维码展示出来进行扫码支付
|
|
|
+ String code_url = result.get("code_url");
|
|
|
+
|
|
|
+ setAttr("code_url", code_url);
|
|
|
+ render("/jsp/pc_pay.jsp");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * wap支付第一版本
|
|
|
+ */
|
|
|
+ public void wap1() {
|
|
|
+ Map<String, String> params = new HashMap<String, String>();
|
|
|
+ params.put("appid", appid);
|
|
|
+ params.put("mch_id", partner);
|
|
|
+ params.put("body", "JFinal2.0极速开发");
|
|
|
+ params.put("out_trade_no", "977773682111");
|
|
|
+ params.put("total_fee", "1");
|
|
|
+
|
|
|
+ String ip = IpKit.getRealIp(getRequest());
|
|
|
+ if (StrKit.isBlank(ip)) {
|
|
|
+ ip = "127.0.0.1";
|
|
|
+ }
|
|
|
+
|
|
|
+ params.put("spbill_create_ip", ip);
|
|
|
+ params.put("trade_type", TradeType.WAP.name());
|
|
|
+ params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
+ params.put("notify_url", notify_url);
|
|
|
+
|
|
|
+ String sign = PaymentKit.createSign(params, paternerKey);
|
|
|
+ params.put("sign", sign);
|
|
|
+ String xmlResult = PaymentApi.pushOrder(params);
|
|
|
+
|
|
|
+ System.out.println(xmlResult);
|
|
|
+ Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
+
|
|
|
+ String return_code = result.get("return_code");
|
|
|
+ String return_msg = result.get("return_msg");
|
|
|
+ if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
+ renderText(return_msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String result_code = result.get("result_code");
|
|
|
+ if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
+ renderText(return_msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
+ String prepayId = result.get("prepay_id");
|
|
|
+ String url = PaymentApi.getDeepLink(appid, prepayId, paternerKey);
|
|
|
+
|
|
|
+ // 微信那边的开发建议用a标签打开该链接
|
|
|
+ setAttr("url", url);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * wap支付第二版
|
|
|
+ */
|
|
|
+ public void wap2() {
|
|
|
+ Map<String, String> params = new HashMap<String, String>();
|
|
|
+ params.put("appid", appid);
|
|
|
+ params.put("mch_id", partner);
|
|
|
+ params.put("body", "JFinal2.0极速开发");
|
|
|
+ params.put("out_trade_no", "977773682111");
|
|
|
+ params.put("total_fee", "1");
|
|
|
+
|
|
|
+ String ip = IpKit.getRealIp(getRequest());
|
|
|
+ if (StrKit.isBlank(ip)) {
|
|
|
+ ip = "127.0.0.1";
|
|
|
+ }
|
|
|
+
|
|
|
+ params.put("spbill_create_ip", ip);
|
|
|
+ params.put("trade_type", TradeType.MWEB.name());
|
|
|
+ params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
|
|
|
+ params.put("notify_url", notify_url);
|
|
|
+
|
|
|
+ String sign = PaymentKit.createSign(params, paternerKey);
|
|
|
+ params.put("sign", sign);
|
|
|
+ String xmlResult = PaymentApi.pushOrder(params);
|
|
|
+
|
|
|
+ System.out.println(xmlResult);
|
|
|
+ Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
|
|
|
+
|
|
|
+ String return_code = result.get("return_code");
|
|
|
+ String return_msg = result.get("return_msg");
|
|
|
+ if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
|
|
|
+ renderText(return_msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String result_code = result.get("result_code");
|
|
|
+ if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
|
|
|
+ renderText(return_msg);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
|
|
|
+ String url = result.get("mweb_url");
|
|
|
+
|
|
|
+ // 微信那边的开发建议用a标签打开该链接
|
|
|
+ setAttr("url", url);
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getParamByUrl(String url, String name) {
|
|
|
+ url += "&";
|
|
|
+ String pattern = "(\\?|&){1}#{0,1}" + name + "=[a-zA-Z0-9]*(&{1})";
|
|
|
+
|
|
|
+ Pattern r = Pattern.compile(pattern);
|
|
|
+
|
|
|
+ Matcher m = r.matcher(url);
|
|
|
+ if (m.find()) {
|
|
|
// System.out.println(m.group(0));
|
|
|
- return m.group(0).split("=")[1].replace("&", "");
|
|
|
- } else {
|
|
|
- return null;
|
|
|
- }
|
|
|
+ return m.group(0).split("=")[1].replace("&", "");
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|
|
|
}
|