chore(producer) hide transaction message internal state
diff --git a/rocketmq/client.py b/rocketmq/client.py
index a8f7f6c..1a58aa1 100644
--- a/rocketmq/client.py
+++ b/rocketmq/client.py
@@ -16,7 +16,8 @@
 )
 from .consts import MessageProperty
 
-__all__ = ['SendStatus', 'Message', 'RecvMessage', 'Producer', 'PushConsumer', 'PullConsumer', 'TransactionMQProducer']
+__all__ = ['SendStatus', 'Message', 'RecvMessage', 'Producer', 'PushConsumer', 'PullConsumer', 'TransactionMQProducer',
+           'TransactionStatus']
 
 PY2 = sys.version_info[0] == 2
 if PY2:
@@ -36,6 +37,12 @@
     SLAVE_NOT_AVAILABLE = 3
 
 
+class TransactionStatus(IntEnum):
+    COMMIT = 0
+    ROLLBACK = 1
+    UNKNOWN = 2
+
+
 def _to_bytes(s):
     if isinstance(s, text_type):
         return s.encode('utf-8')
@@ -112,7 +119,7 @@
 
     @property
     def reconsume_times(self):
-        return dll.GetMessageReconsumeTimes(self._hanle)
+        return dll.GetMessageReconsumeTimes(self._handle)
 
     @property
     def store_size(self):
@@ -346,7 +353,8 @@
 class TransactionMQProducer(Producer):
     def __init__(self, group_id, checker_callback, user_args=None, timeout=None, compress_level=None,
                  max_message_size=None):
-	self._callback_refs = []
+        self._callback_refs = []
+
         def _on_check(producer, cmsg, user_args):
             py_message = RecvMessage(cmsg)
             return checker_callback(py_message)
@@ -363,7 +371,6 @@
             self.set_compress_level(compress_level)
         if max_message_size is not None:
             self.set_max_message_size(max_message_size)
-    
 
     def __del__(self):
         if self._handle is not None:
@@ -386,7 +393,7 @@
 
         local_execute_callback = LOCAL_TRANSACTION_EXECUTE_CALLBACK(_on_local_execute)
         self._callback_refs.append(local_execute_callback)
-        
+
         result = _CSendResult()
         try:
             ffi_check(
diff --git a/rocketmq/ffi.py b/rocketmq/ffi.py
index b55fc8e..0c87c43 100644
--- a/rocketmq/ffi.py
+++ b/rocketmq/ffi.py
@@ -117,7 +117,7 @@
     RECONSUME_LATER = 1
 
 
-class TransactionStatus(CtypesEnum):
+class _CTransactionStatus(CtypesEnum):
     E_COMMIT_TRANSACTION = 0
     E_ROLLBACK_TRANSACTION = 1
     E_UNKNOWN_TRANSACTION = 2
diff --git a/samples/producer.py b/samples/producer.py
index 2dcf476..e45ece1 100644
--- a/samples/producer.py
+++ b/samples/producer.py
@@ -14,8 +14,7 @@
 # * See the License for the specific language governing permissions and
 # * limitations under the License.
 # */
-from rocketmq.client import Producer, Message, TransactionMQProducer
-from rocketmq.ffi import TransactionStatus
+from rocketmq.client import Producer, Message, TransactionMQProducer, TransactionStatus
 
 import time
 
@@ -58,12 +57,12 @@
 
 def check_callback(msg):
     print 'check: ' + msg.id.decode('utf-8')
-    return TransactionStatus.E_COMMIT_TRANSACTION
+    return TransactionStatus.COMMIT
 
 
 def local_execute(msg, user_args):
     print 'local   ' + msg.id.decode('utf-8')
-    return TransactionStatus.E_UNKNOWN_TRANSACTION 
+    return TransactionStatus.UNKNOWN
 
 
 def send_transaction_message(count):