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_14_ID_Info_Check_Return_Photo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            /**
             * 重要：联调测试时请仔细阅读注释！
             * 
             * 产品：综合认证服务平台产品<br>
             * 交易：公民身份证简项认证及返回照片 <br>
             * 日期： 2017-11<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"] = "85";//交易类型
            param["txnSubType"] = "01";//交易子类
            param["bizType"] = "000803";//产品类型
            //P024：仅简项认证
            //Q024：简项认证并返回照片
            param["productId"] = "P024"; //产品编码
  
            //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演示页面传递的参数

            //银行卡验证信息及身份信息  仅上送身份证号、姓名
            Dictionary<string, string> customerInfoMap = new Dictionary<string, string>();
            customerInfoMap["customerNm"]="张三";					//姓名
            customerInfoMap["certifId"]="341126197709218366";		//证件号码

            string customerInfoStr = AcpService.GetCustomerInfoWithEncrypt(customerInfoMap, Encoding.GetEncoding("UTF-8"));
            param["customerInfo"]= customerInfoStr;

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

            string url = SDKConfig.ZhrzBackTransUrl;//发送post 请求的地址

            Dictionary<String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8);

            Response.Write(DemoUtil.GetPrintResult(url, param, rspData));

            if (rspData.Count != 0)
            {

                if (AcpService.Validate(rspData, System.Text.Encoding.UTF8))
                {
                    Response.Write("商户端验证返回报文签名成功。<br>\n");
                    string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取
                    if ("00" == respcode)
                    {
                        //成功
                    }
                    else if ("05" == respcode)
                    {
                        //不明原因超时，后续继续发起交易查询。
                        //TODO
                        Response.Write("处理超时，请稍后查询。<br>\n");
                    }
                    else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("交易失败或业务返回失败：" + rspData["respMsg"] + "。<br>\n");
                    }
                }
            }
            else
            {
                Response.Write("请求失败\n");
            }
        }
    }
}