📄 wappushencoder.java
字号:
package com.wap;
import java.io.IOException;
import java.util.Calendar;
import java.util.Vector;
import com.tools.Utf8Util;
import sun.misc.BASE64Decoder;
public class WapPushEncoder {
public static String getBASE64(String s) {
if(s == null)
return null;
return (new sun.misc.BASE64Encoder()).encode(s.getBytes());
}
public static String getFromBASE64(String s) {
if(s == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
System.out.print(new String(b));
return new String(b);
}
catch(Exception e) {
return null;
}
}
/**
* @param content
* @param url
* @return
* NOKIA 6600可以通过,其余不是很顺利;多普大也收到
* 李伟版本;
*/
public byte[] format(String content, String url) {
byte[] bytContent = null;
byte[] bytURL = null;
try {
// bytContent = content.getBytes();
// bytURL = url.getBytes();
// content = new String(bytContent, "UTF-8");
// bytContent = content.getBytes("UTF-8");
String contentUTF8=Utf8Util.getInstance().GBKToUtf8(content);
String urlUTF8=Utf8Util.getInstance().GBKToUtf8(url);
// bytContent = contentUTF8.getBytes();
bytContent=this.chString2UTF8_byte(content);
// System.out.println(this.byteToHexStr(bytContent));
// System.out.println(this.byteToHexStr(this.chString2UTF8_byte(content)));
//
bytURL = urlUTF8.getBytes();
// System.out.println(this.byteToHexStr(bytURL));
}
catch(Exception ex) {
ex.printStackTrace(); }
int iContentLen = bytContent.length;
int iURLLen = bytURL.length;
byte[] bytMsg = new byte[36 + iContentLen + iURLLen];
int i = 0;
bytMsg[i++] = (byte)0x06;
bytMsg[i++] = (byte)0x05;
bytMsg[i++] = (byte)0x04;
bytMsg[i++] = (byte)0x0b;
bytMsg[i++] = (byte)0x84;
bytMsg[i++] = (byte)0x23;
bytMsg[i++] = (byte)0xf0;
bytMsg[i++] = (byte)0x72;
bytMsg[i++] = (byte)0x06;
bytMsg[i++] = (byte)0x0a;
bytMsg[i++] = (byte)0x03;
bytMsg[i++] = (byte)0xae;
bytMsg[i++] = (byte)0x81;
bytMsg[i++] = (byte)0xea;
bytMsg[i++] = (byte)0xaf;
bytMsg[i++] = (byte)0x82;
bytMsg[i++] = (byte)0x8d;
bytMsg[i++] = (byte)0xae; // 18
int ipos = i;
bytMsg[i++] = (byte)159; //159+iURLLen
bytMsg[i++] = (byte)0x87;
bytMsg[i++] = (byte)0x01;
bytMsg[i++] = (byte)0x05;
bytMsg[i++] = (byte)0x6a;
bytMsg[i++] = (byte)(iContentLen + 1);
System.arraycopy(bytContent, 0, bytMsg, i, iContentLen);
i += iContentLen;
bytMsg[i++] = (byte)0x00;
bytMsg[i++] = (byte)0x45;
bytMsg[i++] = (byte)0xc6;
bytMsg[i++] = (byte)0x0c;
bytMsg[i++] = (byte)0x03;
System.arraycopy(bytURL, 0, bytMsg, i, iURLLen);
i += iURLLen;
bytMsg[ipos] += (byte)iURLLen;
bytMsg[i++] = (byte)0x00;
bytMsg[i++] = (byte)0x08;
bytMsg[i++] = (byte)0x01;
bytMsg[i++] = (byte)0x83;
bytMsg[i++] = (byte)0x00;
bytMsg[i++] = (byte)0x01;
bytMsg[i++] = (byte)0x01;
// System.out.println("BYTE LENGTH : " + bytMsg.length);
return bytMsg;
}
public String byteToHexStr(byte buf[]) {
StringBuffer sb = new StringBuffer(2 * buf.length);
for(int i = 0; i < buf.length; i++) {
int h = (buf[ i ] & 0xf0) >> 4;
int l = (buf[ i ] & 0x0f);
sb.append(new Character((char)((h > 9) ? 'a' + h - 10 : '0' + h)));
sb.append(new Character((char)((l > 9) ? 'a' + l - 10 : '0' + l)));
}
return sb.toString().toUpperCase();
}
public String intToHexStr(int i) {
if(i>255)
return "00";
StringBuffer sb = new StringBuffer(2);
int h=0;
int l=0;
h=i/16;
// System.out.println(h);
l=i%16;
// System.out.println(l);
sb.append(new Character((char)((h > 9) ? 'a' + h - 10 : '0' + h)));
sb.append(new Character((char)((l > 9) ? 'a' + l - 10 : '0' + l)));
System.out.println(sb.toString().toUpperCase());
return sb.toString().toUpperCase();
}
private byte[] chString2UTF8_byte(String str) {
byte[] result = null;
try{
str = new String(str.getBytes(),"GB2312");
result = str.getBytes("UTF-8");
}catch (Exception e){
e.printStackTrace();
}
return result;
}
/**
* @param content
* @param url
* @return
* 没有长度控制。
*/
public byte[] format5(String content,String url){
//第一部分
byte[] WapPushUDH = new byte[]
{
0x06, 0x05, 0x04, 0x0B, (byte) 0x84, 0x23, (byte) 0xF0
};
//第二部分
byte[] WapPushPUD = new byte[]
{
0x25,0x06,0x01,(byte) 0xae
};
//第三部分
byte[] WapPushIndicator = new byte[]
{
0x02, 0x05, 0x6A, 0x00, 0x45, (byte) 0xC6, 0x0C, 0x03
};
//第四部分:URL去掉http://后的UTF8编码
//第五部分
// *pszPos++ = 0x00; //字符串结束
// *pszPos++ = 0x01; //>
// *pszPos++ = 0x03; //字符串开始
//
byte[] WapPushDisplayTextHeader = new byte[]
{
0x00, 0x01, 0x03
};
//第六部分:消息文字的UTF8编码
//第七部分:
// *pszPos++ = 0x00; //字符串结束
// *pszPos++ = 0x01; //</indication>"
// *pszPos++ = 0x01; //</si>
byte[] EndOfWapPush = new byte[]
{
0x00, 0x01, 0x01
};
// String wapPushHeader1="0B05040B8423F00003030101";
// String wapPushHeader2="29060603AE81EA8DCA";
// String wapPushIndicator="02056A0045C60C03";
//// 第四部分:URL去掉http://后的UTF8编码
// String wapPushDisplayTextHeader="000103";
//// 第六部分:消息文字的UTF8编码
// String wapPushEnd="000101";
byte[] bytContent = null;
byte[] bytURL = null;
try {
// content=Utf8Util.getInstance().GBKToUtf8(content);
//
// bytContent = content.getBytes();
// bytURL = url.getBytes();
// content = new String(bytContent, "UTF-8");
// bytContent = content.getBytes("UTF-8");
String contentUTF8=Utf8Util.getInstance().GBKToUtf8(content);
String urlUTF8=Utf8Util.getInstance().GBKToUtf8(url);
// bytContent = contentUTF8.getBytes();
bytContent=this.chString2UTF8_byte(content);
// System.out.println(this.byteToHexStr(bytContent));
bytURL = urlUTF8.getBytes();
// System.out.println(this.byteToHexStr(bytURL));
}
catch(Exception ex) {
ex.printStackTrace();
}
int i=0;
int nWapPushUDHLen=WapPushUDH.length;
int nWapPushPUDLen=WapPushPUD.length;
int nPushIndicatorLen=WapPushIndicator.length;
int nBytURLLen=bytURL.length;
int nPushDisplayTextHeaderLen=WapPushDisplayTextHeader.length;
int nBytContentLen=bytContent.length;
int nEndOfWapPushLen=EndOfWapPush.length;
// int totalLen=nWapPushUDHLen+nWapPushPUDLen+nPushIndicatorLen+nBytURLLen+nPushDisplayTextHeaderLen+nBytContentLen+nEndOfWapPushLen;
int bodyLen=nPushIndicatorLen+nBytURLLen+nPushDisplayTextHeaderLen+nBytContentLen+nEndOfWapPushLen;
int totalLen=nWapPushUDHLen+nWapPushPUDLen+bodyLen;
// 否则MOTO A768不能正常接收
// WapPushPUD[nWapPushPUDLen-1]=(byte) (bodyLen/2+128); 不能使用
byte[] bytMsg = new byte[totalLen];
System.arraycopy(WapPushUDH, 0, bytMsg, i, nWapPushUDHLen);
i+=nWapPushUDHLen;
System.arraycopy(WapPushPUD, 0, bytMsg, i, nWapPushPUDLen);
i+=nWapPushPUDLen;
System.arraycopy(WapPushIndicator, 0, bytMsg, i, nPushIndicatorLen);
i+=nPushIndicatorLen;
System.arraycopy(bytURL, 0, bytMsg, i, nBytURLLen);
i+=nBytURLLen;
System.arraycopy(WapPushDisplayTextHeader, 0, bytMsg, i, nPushDisplayTextHeaderLen);
i+=nPushDisplayTextHeaderLen;
System.arraycopy(bytContent, 0, bytMsg, i, nBytContentLen);
i+=nBytContentLen;
System.arraycopy(EndOfWapPush, 0, bytMsg, i, nEndOfWapPushLen);
return bytMsg;
}
/**
* @param content
* @param url
* @return
* 包头c:
UDH: 06 05 04 0B 84 23 F0
PUD: 81 06 06 03 AE 81 EA 8D 00
有长度控制
*/
public byte[] format1(String content,String url){
byte[] WapPushUDH = new byte[]
{
0x06,0x05,0x04,0x0B,(byte) 0x84,0x23,(byte) 0xF0
};
byte[] WapPushPUD = new byte[]
{
(byte) 0x81,0x06,0x06,0x03,(byte) 0xAE,(byte) 0x81,(byte) 0xEA,(byte) 0x8D,0x00
};
// *pszPos++ = 0x02;;
// *pszPos++ = 0x05; //-//WAPFORUM//DTD SI 1.0//EN
// *pszPos++ = 0x6A; //UTF-8
// *pszPos++ = 0x00; //字符串结束
// *pszPos++ = 0x45; //<si>
// *pszPos++ = 0xC6; //<indication
// *pszPos++ = 0x08; //<action=signal-high>
// *pszPos++ = 0x0C; //href="http://"
// *pszPos++ = 0x03; //字符串开始
//第三部分
byte[] WapPushIndicator = new byte[]
{
0x02, 0x05, 0x6A, 0x00, 0x45, (byte) 0xC6,0x08,0x0C, 0x03
};
//第四部分:URL去掉http://后的UTF8编码
//第五部分
// *pszPos++ = 0x00; //字符串结束
// *pszPos++ = 0x01; //>
// *pszPos++ = 0x03; //字符串开始
//
byte[] WapPushDisplayTextHeader = new byte[]
{
0x00, 0x01, 0x03
};
//第六部分:消息文字的UTF8编码
// //第七部分:
// *pszPos++ = 0x00; //字符串结束
// *pszPos++ = 0x01; //</indication>"
// *pszPos++ = 0x01; //</si>
byte[] EndOfWapPush = new byte[]
{
0x00, 0x01, 0x01
};
byte[] bytContent = null;
byte[] bytURL = null;
try {
// content=Utf8Util.getInstance().GBKToUtf8(content);
//
// bytContent = content.getBytes();
// bytURL = url.getBytes();
// content = new String(bytContent, "UTF-8");
// bytContent = content.getBytes("UTF-8");
String contentUTF8=Utf8Util.getInstance().GBKToUtf8(content);
String urlUTF8=Utf8Util.getInstance().GBKToUtf8(url);
// bytContent = contentUTF8.getBytes();
bytContent=this.chString2UTF8_byte(content);
// System.out.println(this.byteToHexStr(bytContent));
bytURL = urlUTF8.getBytes();
// System.out.println(this.byteToHexStr(bytURL));
}
catch(Exception ex) {
ex.printStackTrace();
}
int i=0;
int nWapPushUDHLen=WapPushUDH.length;
int nWapPushPUDLen=WapPushPUD.length;
int nPushIndicatorLen=WapPushIndicator.length;
int nBytURLLen=bytURL.length;
int nPushDisplayTextHeaderLen=WapPushDisplayTextHeader.length;
int nBytContentLen=bytContent.length;
int nEndOfWapPushLen=EndOfWapPush.length;
int bodyLen=nPushIndicatorLen+nBytURLLen+nPushDisplayTextHeaderLen+nBytContentLen+nEndOfWapPushLen;
int totalLen=nWapPushUDHLen+nWapPushPUDLen+bodyLen;
// 否则MOTO A768不能正常接收
WapPushPUD[nWapPushPUDLen-1]=(byte) (bodyLen/2+128);
byte[] bytMsg = new byte[totalLen];
System.arraycopy(WapPushUDH, 0, bytMsg, i, nWapPushUDHLen);
i+=nWapPushUDHLen;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -