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
{
    /**
     * 重要：联调测试时请仔细阅读注释！
     * 
     * 产品：综合认证服务产品<br>
     * 交易：银行卡信息查询 <br>
     * 日期：2017-12<br>
     * 版权： 中国银联<br>
     * 说明：以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己需要，按照技术文档编写。该代码仅供参考，不提供编码性能规范性等方面的保障<br>
     * 该接口参考文档位置：open.unionpay.com帮助中心 下载  产品接口规范  《中国银联综合认证服务平台接口规范》，<br>
     * 测试过程中的如果遇到疑问或问题您可以：1）优先在open平台中查找答案：
     * 							        调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list 帮助中心 FAQ 搜索解决方案
     *                             测试过程中产生的7位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList 输入应答码搜索解决方案
     *                           2） 咨询在线人工支持： open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”，咨询人工QQ测试支持。
     */

    public partial class Form_5_4_Card_Info_Query : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            string accNo = Request.Form["accNo"].ToString(); //卡号

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

            //以下信息非特殊情况不需要改动
            param["version"] = SDKConfig.Version;//版本号
            param["encoding"] = "UTF-8";//编码方式
            param["signMethod"] = SDKConfig.SignMethod;// "01";//签名方法
            param["txnType"] = "70";//交易类型
            param["txnSubType"] = "03";//交易子类
            param["bizType"] = "000803";//产品类型
            param["productId"] = "Q001";
            param["encryptCertId"] = AcpService.GetEncryptCertId();//加密证书ID

            //TODO 以下信息需要填写
            param["merId"] = Request.Form["merId"].ToString();//商户号，请改自己的测试商户号，此处默认取demo演示页面传递的参数
            param["orderId"] = Request.Form["orderId"].ToString();//商户订单号，8-32位数字字母，不能含“-”或“_”，此处默认取demo演示页面传递的参数，可以自行定制规则
            param["txnTime"] = Request.Form["txnTime"].ToString();//订单发送时间，格式为YYYYMMDDhhmmss，取北京时间，此处默认取demo演示页面传递的参数，参考取法： DateTime.Now.ToString("yyyyMMddHHmmss")

            //param["accNo"] = accNo; //卡号，不加密请按此方式填写
            param["accNo"] = AcpService.EncryptData(accNo, System.Text.Encoding.UTF8); //卡号，加密请按此方式填写
            
            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)
                    {
                        //TODO
                        Response.Write("交易成功。<br>\n");
                    }else
                    {
                        //其他应答码做以失败处理
                        //TODO
                        Response.Write("失败：" + rspData["respMsg"] + "。<br>\n");
                    }
                }
                else
                {
                    Response.Write("商户端验证返回报文签名失败。<br>\n");
                }
            }
            else
            {
                Response.Write("请求失败<br>\n");
            }
 
        }
    }
}