通过这篇文章,你可以了解到通过Java处理PixelPay订单的流程
要创建订单,你需要拥有以下信息
- SID
- 玩家名
- 金额
- 支付方式名
- (可选)礼包名
支付方式和支付方式名对应如下表(因为支付宝二维码支付暂未完工,所以不在下方列出)
微信 | ddm_wechat_all |
ddm_tencent_all |
在集齐了上方信息以后,创建URL,传递上方的参数,并打开连接,括号内参数选填
http://vexrmb.i8mc.cn/index.php/Doserverpay/create.html?id=SID&playername=玩家名&money=金额&payway=支付方式(&kit=礼包名)
例如 http://vexrmb.i8mc.cn/index.php/Doserverpay/create.html?id=1&playername=Test&money=1&payway=ddm_wechat_all
就是在SID为1的服务器上,为Test玩家创建一个使用微信支付的金额为1元的订单
打开连接后会返回一个html文件,你可以通过下方java代码来获取具体的订单信息
public HashMap<String, String> getPageCode(String host) {
HashMap<String, String> reason = new HashMap<>();
try {
URL url = new URL(host);
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader bf = new BufferedReader(isr);
String text;
StringBuffer sb = new StringBuffer();
while ((text = bf.readLine()) != null) {
sb.append(text);
}
Pattern pattern = Pattern.compile("<dl class=\"dl-horizontal\"> <dt>.*</dl> <hr> <dl class=\"dl-horizontal\">");
Matcher matcher = pattern.matcher(sb);
String mes = null;
while (matcher.find()) {
mes = matcher.group();
}
if (mes != null) {
return getArgs(mes);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return reason;
}
public HashMap<String, String> getArgs(String mes) {
HashMap<String, String> reason = new HashMap<>();
if (mes != null) {
String[] fg = mes.replace("<dl class=\"dl-horizontal\"> <dt>", "")
.replace("</b></dd> </dl> <hr> <dl class=\"dl-horizontal\">", "")
.replace("<em>←若未注册充值系统, 建议保存</em>", "").split("</dd> <dt>");
for (String i : fg) {
String[] value = i.split("</dt> <dd>");
switch (value[0]) {
case "订单号":
reason.put("%order%", value[1]);
break;
case "下单时间":
reason.put("%create_time%", value[1]);
break;
case "充值金额":
reason.put("%money%", value[1]);
break;
case "支付方式":
reason.put("%type%", value[1]);
break;
case "充值服务器":
reason.put("%server%", value[1]);
break;
case "充值账号":
reason.put("%user%", value[1]);
break;
case "支付订单号":
reason.put("%ddmorder%", value[1].substring(3));
default:
break;
}
}
}
return reason;
}
调用方法 getPageCode 你可以获得一个Map,调用该Map的get("%order%"),你会得到订单号的字符串
String url = "http://vexrmb.i8mc.cn/index.php/Doserverpay/create.html?id=1&playername=Test&money=1&payway=ddm_wechat_all";
Map<String,String> tmp = getPageCode(url);
String order = tmp.get("%order%");
则变量order就是该订单的订单号
获取了订单号之后,你就可以获得该支付方式对应的二维码图片
创建URL http://vexrmb.i8mc.cn/index.php/api/getWechatQRCode?id=SID&key=Key&order=订单号 通过ImageIO.read()方法,即可读取到该订单号的支付二维码。
在支付完成后,你可以通过WebAPI的s_orders函数,获取所有支付成功,未发货的订单,再进行发货,并调用s_ship函数,标记已发货的订单,即可完成订单周期。
注意,在这里所有涉及到的网络连接,建议均使用异步进行操作,否则会造成不必要的卡顿甚至崩溃
关于异步操作,在这里只简单介绍
new BukkitRunnable() {
@Override
public void run() {
//TODO 你需要异步操作的代码
}
}.runTaskAsynchronously(plugin)
使用上方的代码,即最简单的进行异步操作,其他的不过多解释
Comments | NOTHING