银联支付组件。
图1 | 图2 |
方法 |
方法说明 |
---|---|
Pay |
支付。 |
C#: string tradeNo = "";//交易订单好 string merID = "**********";//商户id,从银联平台获取 string ordertime = "";//交易事件
C#: private void button3_Press(object sender, EventArgse) { Dictionary<string, string> param = new Dictionary<string, string(); //以下信息非特殊情况不需要改动 param["version"] = SDKConfig.Version;//版本号 param["encoding"] = "UTF-8";//编码方式 param["txnType"] = "01";//交易类型 param["txnSubType"] = "01";//交易子类 param["bizType"] = "000201";//业务类型 param["signMethod"] = SDKConfig.SignMethod;//签名方法 param["channelType"] = "08";//渠道类型 param["accessType"] = "0";//接入类型 param["backUrl"] = SDKConfig.BackUrl; //后台通知地址 param["currencyCode"] = "156";//交易币种 //TODO 以下信息需要填写 param["merId"] = merID;//商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数 param["orderId"] ="SMOAPP" + DateTime.Now.ToString("yyyyMMddHHmmss");//商户订单号,8-32位数字字母,不能含“-”或“_”,可以自行定制规则 param["txnTime"] = ordertime = DateTime.Now.ToString("yyyyMMddHHmmss");//订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss") param["txnAmt"] = "5000";//交易金额,单位分,此处默认取demo演示页面传递的参数 // 请求方保留域, // 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。 // 出现部分特殊字符时可能影响解析,请按下面建议的方式填写: // 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。 //param["reqReserved"] = "透传信息1|透传信息2|透传信息3"; // 2. 内容可能出现&={}[]"'符号时: // 1) 如果需要对账文件里能显示,可将字符替换成全角&={}“‘字符(自己写代码,此处不演示); // 2) 如果对账文件没有显示要求,可做一下base64(如下)。 // 注意控制数据长度,实际传输的数据长度不能超过1024位。 // 查询、通知等接口解析时使用System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(reqReserved))解base64后再对数据做后续解析。 //param["reqReserved"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("任意格式的信息都可以")); AcpService.Sign(param, System.Text.Encoding.UTF8); // 签名 string url = SDKConfig.AppRequestUrl; Dictionary<string, string > rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8); if (rspData.Count != 0) { if (AcpService.Validate(rspData, System.Text.Encoding.UTF8)) { Toast("商户端验证返回报文签名成功。"); string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取 if ("00" == respcode) { //成功 //TODO Toast("成功接收tn:" + rspData["tn"]); unionPay1.Pay("01", rspData["tn"].ToString(),(obj,args)=> { if (args.isError == false) Toast("succcess"); else { Toast(args.error); } }); //后续请将此tn传给手机开发,由他们用此tn调起控件后完成支付。 //手机端demo默认从仿真获取tn,仿真只返回一个tn,如不想修改手机和后台间的通讯方式, } else { //其他应答码做以失败处理 //TODO Toast("失败:" + rspData["respMsg"]); } } else { Toast("商户端验证返回报文签名失败。"); } } else { Toast("请求失败"); } }
C#: // 第三个参数需要和smobiler云平台上添加银联插件填写value值一致 unionPay1.Pay("01", rspData["tn"].ToString(), "payDemo", (obj, args) => {});
C#: private void button2_Press(object sender, EventArgs e) { Dictionary<string, string param = new Dictionary<string, string(); //以下信息非特殊情况不需要改动 param["version"] = SDKConfig.Version;//版本号 param["encoding"] = "UTF-8";//编码方式 param["certId"] = CertUtil.GetSignCertId();//证书ID param["signMethod"] = SDKConfig.SignMethod;//签名方法 param["txnType"] = "00";//交易类型 param["txnSubType"] = "00";//交易子类 param["bizType"] = "000000";//业务类型 param["accessType"] = "0";//接入类型 param["channelType"] = "07";//渠道类型 //TODO 以下信息需要填写 param["orderId"] = tradeNo; //请修改被查询的交易的订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数 param["merId"] = merID;//商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数 param["txnTime"] =ordertime;//请修改被查询的交易的订单发送时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数 AcpService.Sign(param, System.Text.Encoding.UTF8); // 签名 string url = SDKConfig.SingleQueryUrl; Dictionary<string, string> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8); if (rspData.Count != 0) { if (AcpService.Validate(rspData, System.Text. Encoding.UTF8)) { string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取 if ("00" == respcode) { string origRespCode = rspData["origRespCode"]; //其他应答参数也可用此方法获取 //处理被查询交易的应答码逻辑 if ("00" == origRespCode) { //交易成功,更新商户订单状态 //TODO Toast("交易成功。"); } else if ("03" == origRespCode || "04" == origRespCode || "05" == origRespCode) { //需再次发起交易状态查询交易 //TODO Toast("稍后查询。"); } else { //其他应答码做以失败处理 //TODO Toast("交易失败:" + rspData["origRespMsg"]); } } else if ("03" == respcode || "04" == respcode || "05" == respcode) { //不明原因超时,后续继续发起交易查询。 //TODO< Toast("处理超时,请稍后查询。"); } else { //其他应答码做以失败处理 //TODO Toast("查询操作失败:" + rspData["respMsg"]); } } } else { Toast("请求失败"); } }
完整代码参考SmobilerTutorials