⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wappushencoder.java

📁 WAPPUSH的JAVA代码,已经通过了CMPP的测试,多种手机可以支持.
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
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 + -