📄 msgpay.java
字号:
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.TextMessage;
/*
* MsgPay.java
* 用于通过短信的形式,用户把指令发送SP的端口号上进行付款
*
* 测试通过的手机型号包括
* Moto E398 V300
* Nokia 3230 7260 6101 3100 (QD,7650不支持)
* 索爱 W550C (K700C不支持)
* 详细说明,请看最底部的文字说明
*/
public final class MsgPay {
/**
* 端口号
* 即发送SP在移动上所注册的端口号,由SP规定
* 暂时有两个,如有新的,日后补充
* 测试时,程序员可以修改为任意中国移动的手机号码,如"13888888888"、自己或同事的号码
*/
/**跟指令DICTATE_YX组合,就收取1元的资费*/
// private final String PORT_66550 = "66550"; //"66550";
private final String PORT_916066 = "916066"; //"66550";
// private final String PORT_916066 = "13818365949"; //"66550";
/**跟指令DICTATE_YX组合,就收取1.5元的资费*/
// private final String PORT_6655328 = "6655328"; //"6655328"
/**
* 指令内容
* 即所发信息的内容,由SP规定
* 暂时有一个,如有新的,日后补充
* 测试时可以任意内容,如"你好"
*/
/**指令内容*/
private final String DICTATE_YX = "SU"; //"SU"
/**是否已经付款的记录名*/
// private final String strRecordName = "payRecode";
//发送消息结果
/**发送成功*/
public final static int SEND_SUCCESS = 0;
/**发送失败,发送时用户按了取消*/
public final static int SEND_USERCANCLE = 1;
/**发送失败,手机卡过期,非移动的电话卡,或余额不足订购费用其它失败原因*/
public final static int SEND_FAIL = 2;
/**没有记录*/
public final static int REC_NONE = -1;
private String strWebID = "";
/** 构造函数 */
public MsgPay() {
String strWebIDTemp = getWebID();
if (strWebIDTemp != null) {
strWebID = strWebIDTemp;
}
}
/**
* 得到所下载网站的ID
* 这里由SP来定,开发时没有该文件也没有问题
*/
private String getWebID() { //由SP来定
return "shwx011403";
}
/**付款1元*/
public int payOneYuan() {
return sendMessage(PORT_916066, DICTATE_YX);
}
/**付款1.5元*/
// public int payOnePointFiveYuan() {
// return sendMessage(PORT_6655328, DICTATE_YX);
// }
/**
* 发送信息
* String strPort为端口号,请在以PORT_开头的常量里选
* String strDictate为指令号,请在以DICTATE_开头的常量里选
* 调用时,要放到线程里使用
* 返回TRUE即发送成功,
* 返回FALSE即发送失败,
* 当手机系统询问用户是否发信息时,用户选择“否”或“不发送”,也会返回FALSE
*/
private int sendMessage(String strPort, String strDictate) {
//返回值
int result = SEND_FAIL;
MessageConnection conn = null;
try {
//地址
String address = "sms://" + strPort;
//建立连接
conn = (MessageConnection) Connector.open(address);
//设置短信息类型为文本,短信息有文本和二进制两种类型
TextMessage msg = (TextMessage) conn.newMessage(MessageConnection.
TEXT_MESSAGE);
msg.setAddress(address);
//设置信息内容
msg.setPayloadText(strDictate + strWebID);
//发送
conn.send(msg);
result = SEND_SUCCESS;
}
catch (SecurityException ex1) {
//当手机系统询问用户是否发出信息,用户选择“否”时,会抛出这个异常
//不想显示时,可以把 ex1.printStackTrace() 语句注释
//未处理
result = SEND_USERCANCLE;
System.out.println("SEND_USERCANCLE");
// ex1.printStackTrace();
}
catch (IOException ex) {
System.out.println("SEND_FAIL");
//未处理
// ex.printStackTrace();
}
finally {
try {
if (conn != null) {
conn.close();
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
System.out.println("return result");
return result;
}
}
/**
* 开 发 注 意
*
* 1.需要用户短信付款前,请在游戏中以明文形式向用户说明收费,(参考):"本游戏收
* 费**元,如果支付,请选“是”,稍候将会收到收费提示短信。",如果是通过电话费买游戏
* 币的,可以提示为“一元可换得游戏币50,如果支付,请选“是”,稍候将会收到收费提示短
* 信。”并可以给用户选择是否发送这操作。发送信息的时间因手机的不同,所用时间会有长短,
* 必要时请用界面形式说明,如“发送中...”。
*
* 2.发送信息后,请根据返回值作相应的处理,如发送成功,用户取消了,或发送失败。
*
*
* 主要几种付费方式及使用方法
*
* 一、一次性付款
* 在开始游戏前,通过isHasRecord()函数检查RMS中是否有已经收费的记录,如果有该记录,
* 就可以直接进入游戏;否则,通过sendMessage(),成功收取费用后就可以进入游戏,并通过
* saveToRMS(int value)函数向RMS插入记录(参数可随意整数)。
*
* 二、RPG游戏里的买道具
* 只使用sendMessage()函数,我们先定好每发一次短信所收取的费用,如¥1元,你们就跟
* 这个收费来定物品,如¥1元可买5个小药水,或换50游戏币等等。如果有其他价格的收费,共同
* 商议。
*
* 三、按关卡收费
* 用getPassedLevel()函数查看已存记录,如果返回REC_NONE,即为一关那没有玩过,从第一
* 关开始收费。saveToRMS(int value)函数用于存储记录已过关卡号。
*
* 四、复活
* 只使用sendMessage()函数,然后根据游戏的设定,到指定的地方复活(如原地复活,定
* 点复活)。
*
* 五、共同商议
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -