using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using com.unionpay.acp.sdk;

namespace upacp_demo_identification.demo.api_99_identification
{
    public partial class Form_5_20_Bank_Card_Identification_Front : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要：联调测试时请仔细阅读注释！
             * 
             * 产品：综合认证服务平台产品<br>
             * 交易：银行卡认证（前台）<br>
             * 日期： 2018-03<br>
             * 版本： 1.0.0 
             * 版权： 中国银联<br>
             */

            Dictionary<string, string> param = new Dictionary<string, string>();

            //以下信息非特殊情况不需要改动
            param["version"] = SDKConfig.Version;// "5.1.0";//版本号
            param["encoding"] = "UTF-8";//编码方式
            param["signMethod"] = SDKConfig.SignMethod;// "01";//签名方法
            param["txnType"] = "72";//交易类型
            param["txnSubType"] = "12";//交易子类
            param["bizType"] = "000803";//产品类型

            //TODO 以下信息需要填写
            param["orderId"] = Request.Form["orderId"].ToString();	//请修改被查询的交易的订单号，8-32位数字字母，不能含“-”或“_”，此处默认取demo演示页面传递的参数
            param["merId"] = Request.Form["merId"].ToString();//商户代码，请改成自己的测试商户号，此处默认取demo演示页面传递的参数
            param["txnTime"] = Request.Form["txnTime"].ToString();//请修改被查询的交易的订单发送时间，格式为YYYYMMDDhhmmss，此处默认取demo演示页面传递的参数
            param["backUrl"] = SDKConfig.BackUrl; //后台返回商户结果时使用，根据实际修改‘
            param["frontUrl"] = SDKConfig.FrontUrl;
            param["frontFailUrl"] = SDKConfig.FrontFailUrl;
            //B136：银行卡二要素（卡号、姓名）
            //B 144：银行卡二要素（卡号、证件类型、证件号）
            //B 132：银行卡二要素（卡号、手机号）
            //B152：银行卡三要素（卡号、身份证号、姓名）
            //B156：银行卡四要素（卡号、手机号、身份证号、姓名）
            string productId = Request.Form["productId"].ToString();

            string accNo = Request.Form["accNo"].ToString(); //卡号
            string phoneNo = Request.Form["phoneNo"].ToString(); //手机号
            string certifTp = Request.Form["certifTp"].ToString(); //证件类型，01-身份证
            string certifId = Request.Form["certifId"].ToString(); //证件号，15位身份证不校验尾号，18位会校验尾号，请务必在前端写好校验代码
            string customerNm = Request.Form["customerNm"].ToString(); //姓名
            Dictionary<string, string> customerInfo = new Dictionary<string, string>();

            if ("B136".Equals(productId))
            {
                customerInfo["customerNm"] = customerNm; //姓名
            }
            else if ("B144".Equals(productId))
            {
                customerInfo["certifTp"] = certifTp; //证件类型，01-身份证
                customerInfo["certifId"] = certifId; //证件号，15位身份证不校验尾号，18位会校验尾号，请务必在前端写好校验代码
            }
            else if ("B132".Equals(productId))
            {
                customerInfo["phoneNo"] = phoneNo; //手机号
            }
            else if ("B152".Equals(productId))
            {
                customerInfo["certifTp"] = certifTp; //证件类型，01-身份证
                customerInfo["certifId"] = certifId; //证件号，15位身份证不校验尾号，18位会校验尾号，请务必在前端写好校验代码
                customerInfo["customerNm"] = customerNm; //姓名
            }
            else if ("B156".Equals(productId))
            {
                customerInfo["phoneNo"] = phoneNo; //手机号
                customerInfo["certifTp"] = certifTp; //证件类型，01-身份证
                customerInfo["certifId"] = certifId; //证件号，15位身份证不校验尾号，18位会校验尾号，请务必在前端写好校验代码
                customerInfo["customerNm"] = customerNm; //姓名
            }
            else if ("B254".Equals(productId))
            {
                customerInfo["phoneNo"] = phoneNo; //手机号
                customerInfo["certifTp"] = certifTp; //证件类型，01-身份证
                customerInfo["certifId"] = certifId; //证件号，15位身份证不校验尾号，18位会校验尾号，请务必在前端写好校验代码
                customerInfo["customerNm"] = customerNm; //姓名
            }

            //param["accNo"] = accNo; //卡号，不加密请按此方式填写
            //param["customerInfo"] = AcpService.GetCustomerInfo(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息，不加密请按此方式填写
            param["accNo"] = AcpService.EncryptData(accNo, System.Text.Encoding.UTF8); //卡号，加密请按此方式填写
            param["customerInfo"] = AcpService.GetCustomerInfoWithEncrypt(customerInfo, System.Text.Encoding.UTF8); //持卡人身份信息，加密请按此方式填写
            param["encryptCertId"] = AcpService.GetEncryptCertId();//加密证书ID
            param["productId"] = productId;

            AcpService.Sign(param, System.Text.Encoding.UTF8);  // 签名

            string url = SDKConfig.ZhrzFrontTransUrl;//发送post 请求的地址
            string html = AcpService.CreateAutoFormHtml(url, param, System.Text.Encoding.UTF8);// 将SDKUtil产生的Html文档写入页面，从而引导用户浏览器重定向   
            Response.ContentEncoding = Encoding.UTF8; // 指定输出编码
            Response.Write(html);
        }
    }
}