protected void Page_Load(object sender, EventArgs e)
        {
            // Pos machine receives request information
            var orderid = Request["orderId"] ?? string.Empty;
            // Request time, the format is yyyyMMddHHmmss
            var reqtime = Request["reqTime"] ?? string.Empty;
            // Packet inspection to check the string
            var mac = Request["MAC"] ?? string.Empty;
            // Extended Field 1
            var ext1 = Request["ext1"] ?? string.Empty;
            // Extended Field 1
            var ext2 = Request["ext2"] ?? string.Empty;

            var merchantId = Request["merchantId"] ?? string.Empty;

            if (string.IsNullOrEmpty(orderid))
            {
                return;
            }

            var signMsgVal = "";

            signMsgVal = AppendParam1(signMsgVal, "orderId", orderid);
            signMsgVal = AppendParam1(signMsgVal, "reqTime", reqtime);
            signMsgVal = AppendParam1(signMsgVal, "ext1", ext1);
            signMsgVal = AppendParam1(signMsgVal, "ext2", ext2);

            var     resqTime     = DateTime.Now.ToString("yyyyMMddHHmmss");
            var     responseCode = "";
            decimal amt          = 0;
            var     address      = "";
            // Pos machine messages for data validation
            var msMac = CerRsaVerifySignature(signMsgVal, mac, Server.MapPath("~/App_Data/PaymentsKey99Bill/mgw.cer"));

            if (msMac || Settings.GetRequiredAppSetting("PayByPhoneQATesting", false))
            {
                var response = OrderProvider.GetPBPPaymentServiceDetail(string.Empty, orderid);
                if (response != null && response.Status == ServiceResponseStatusType.Success)
                {
                    switch (response.PaymentStatus)
                    {
                    case "CNPending":
                        amt          = response.AmountDue;
                        address      = response.DeliveryAddress;
                        responseCode = "00";     // trading success
                        break;

                    case "CNReadyToProcess":
                        responseCode = "94";     // this order has been paid
                        break;

                    case "CNCancelled":
                        responseCode = "55";     // the transaction has been canceled.
                        break;

                    default:
                        responseCode = "93";     // system abnormalities, since only four states
                        break;
                    }
                }
                else
                {
                    responseCode = "93"; // did not find this order
                }
            }
            else
            {
                responseCode = "56";
            }

            var signMsgXml = "<MessageContent>"
                             + "<reqTime>" + reqtime + "</reqTime>"
                             + "<respTime>" + resqTime + "</respTime>"
                             + "<responseCode>" + responseCode + "</responseCode>"
                             + "<message>"
                             + "<orderId>" + orderid + "</orderId>"
                             + "<merchantId>" + merchantId + "</merchantId>"
                             + "<merchantName>lily</merchantName>"
                             + "<amt>" + amt + "</amt>"
                             + "<amt2></amt2>"
                             + "<amt3></amt3>"
                             + "<amt4></amt4>"
                             + "<ext>"
                             + "<userdata1>"
                             + "<value>" + address + "</value>"
                             + "<chnName>订单号</chnName>"
                             + "</userdata1>"
                             + "<userdata2>"
                             + "<value>" + orderid + "</value>"
                             + "<chnName>收件人地址</chnName>"
                             + "</userdata2>"
                             + "</ext>"
                             + "<desc>快钱</desc>"
                             + "</message>"
                             + "</MessageContent>";

            try
            {
                string returnData        = null;
                var    configHelper      = new ConfigHelper("CN_99BillPaymentGateway");
                var    pbpCertificatePwd = configHelper.GetConfigEntry("PNPCertificatePWD");
                var    bytes             = Encoding.UTF8.GetBytes(signMsgXml);
                var    pfxName           = configHelper.GetConfigEntry("PNPCertificateName");
                var    pfxPath           = "~/App_Data/PaymentsKey99Bill/" + pfxName;
                var    cert =
                    new X509Certificate2(
                        HttpContext.Current.Server.MapPath(pfxPath),
                        pbpCertificatePwd, X509KeyStorageFlags.MachineKeySet);
                var rsapri = (RSACryptoServiceProvider)cert.PrivateKey;
                var f      = new RSAPKCS1SignatureFormatter(rsapri);
                f.SetHashAlgorithm("SHA1");
                var sha    = new SHA1CryptoServiceProvider();
                var result = sha.ComputeHash(bytes);
                returnData = Convert.ToBase64String(f.CreateSignature(result));

                var str = "";
                str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
                str += "<ResponseMessage>";
                str += "<MAC>";
                str += returnData;
                str += "</MAC>";
                str += signMsgXml;
                str += "</ResponseMessage>";

                var bytes1 = Encoding.GetEncoding("UTF-8").GetBytes(str);
                var hr     = HttpContext.Current.Response;
                hr.Clear();
                hr.OutputStream.Write(bytes1, 0, bytes1.Length);
                hr.OutputStream.Close();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }