项目实战工商银行支付对接
.NET对接工商银行支付对接
项目中遇到对接【工商银行扫码支付】的同学可以参考使用1. 接口调用事项需使用RSA2加密方式可以使用官方SDK方式调用或直接调用API传输过程中注意API开放平台通用参数需要URLEncode,biz_content在form的body中提交,form中要指明Content-Type属性,Content-Type: application/x-www-form-urlencoded。 需要准备APP_ID,MY_PRIVATE_KEY:RSA私钥 ,APIGW_PUBLIC_KEY:网关公钥 2. 对接流程图
3.工银扫码支付接口
实现扫客户二维码完成支付业务 /// /// 工银二维码被扫支付 /// /// /// /// /// public static bool Pay(string DealID, string nAmount, string qr_code, ref PayResponseV2 pay) { try { string TradeDate = DateTime.Now.ToString("yyyyMMdd"); string TradeTime = DateTime.Now.ToString("HHmmss"); /// /// 非页面服务实现类(RSA加解密方式) /// /// 应用id /// RSA私钥 /// 网关公钥 /// 非页面服务实现类实例 DefaultIcbcClient client = new DefaultIcbcClient(APP_ID, SIGN_TYPE, MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); ///新建服务请求类实例 PayRequestV2 request = new PayRequestV2(); ///新建服务请求类的业务参数类,该类为内部类 PayRequestV2.PayRequestV2Biz bizContent = new PayRequestV2.PayRequestV2Biz(); ///为请求类设置各种参数 request.setServiceUrl(ConfigurationManager.AppSettings["被扫支付"].ToString()); bizContent.setmer_id(mer_id); bizContent.setqr_code(qr_code); bizContent.setOutTradeNo(DealID); bizContent.setOrderAmt(nAmount); bizContent.setTradeDate(TradeDate); bizContent.setTradeTime(TradeTime); request.setBizContent(bizContent); //同步调用并返回response响应类 PayResponseV2 response = null; try { response = (PayResponseV2)client.execute(request); if (response.isSuccess()) { //成功 pay = response; return true; } else { //失败 String errormsg = "支付失败 : " + response.getReturnMsg(); pay = response; return false; } } catch (System.Net.WebException e) { pay.setReturnMsg( e.Message); return false; } } catch (Exception ex) { pay.setReturnMsg(ex.Message); return false; } }4.工银订单查询
实现支付成功后查询查询订单 /// /// 工银二维码查询 /// /// 支付时工行返回的用户唯一标识 /// 商户系统订单号 /// 行内系统订单号 /// public static bool Query(string cust_id, string out_trade_no, string order_id, ref QueryResponse query) { try { string TradeDate = DateTime.Now.ToString("yyyyMMdd"); string TradeTime = DateTime.Now.ToString("HHmmss"); /// /// 非页面服务实现类(RSA加解密方式) /// /// 应用id /// RSA私钥 /// 网关公钥 /// 非页面服务实现类实例 DefaultIcbcClient client = new DefaultIcbcClient(APP_ID, SIGN_TYPE, MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); ///新建服务请求类实例 QueryRequest request = new QueryRequest(); ///新建服务请求类的业务参数类,该类为内部类 QueryRequest.QueryRequestBiz bizContent = new QueryRequest.QueryRequestBiz(); ///为请求类设置各种参数 request.setServiceUrl(ConfigurationManager.AppSettings["查询"].ToString()); bizContent.setmer_id(mer_id); bizContent.setcust_id(cust_id);//支付时工行返回的用户唯一标识 bizContent.setout_trade_no(out_trade_no);//商户系统订单号 bizContent.setorder_id(order_id);//行内系统订单号 request.setBizContent(bizContent); //同步调用并返回response响应类 QueryResponse response = null; try { response = (QueryResponse)client.execute(request); if (response.isSuccess()) { //成功 query = response; return true; } else { //失败 query = response; String errormsg = "查询失败 : " + response.getReturnMsg(); return false; } } catch (System.Net.WebException e) //无法连接到远程服务器,网络异常 { query.setReturnMsg(e.Message); return false; } catch (Exception ex)//抛出其他异常 { query.setReturnMsg(ex.Message); return false; } return false; } catch (Exception ex) { query.setReturnMsg(ex.Message); return false; } }5.工银二维码退款
实现工商银行订单退款 /// /// 工银二维码退款 /// /// 支付时工行返回的用户唯一标识 /// 商户系统订单号 /// 行内系统订单号 /// 商户系统生成的退款编号 /// 退款金额,单位:分 /// 操作人员ID /// public static bool Reject(string cust_id, string out_trade_no, string order_id, string reject_no, string reject_amt, string oper_id, ref RejectResponse reject) { try { string TradeDate = DateTime.Now.ToString("yyyyMMdd"); string TradeTime = DateTime.Now.ToString("HHmmss"); /// /// 非页面服务实现类(RSA加解密方式) /// /// 应用id /// RSA私钥 /// 网关公钥 /// 非页面服务实现类实例 DefaultIcbcClient client = new DefaultIcbcClient(APP_ID, SIGN_TYPE, MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); ///新建服务请求类实例 RejectRequest request = new RejectRequest(); ///新建服务请求类的业务参数类,该类为内部类 RejectRequest.RejectRequestBiz bizContent = new RejectRequest.RejectRequestBiz(); ///为请求类设置各种参数 request.setServiceUrl(ConfigurationManager.AppSettings["退款"].ToString()); bizContent.setmer_id(mer_id); bizContent.setcust_id(cust_id);//支付时工行返回的用户唯一标识 bizContent.setout_trade_no(out_trade_no);//商户系统订单号 bizContent.setorder_id(order_id);//行内系统订单号 bizContent.setreject_no(reject_no); bizContent.setreject_amt(reject_amt); //bizContent.setoper_id(reject_no); request.setBizContent(bizContent); //同步调用并返回response响应类 RejectResponse response = null; try { response = (RejectResponse)client.execute(request); if (response.isSuccess()) { //成功 reject = response; return true; } else { //失败 reject = response; String errormsg = "退款失败 : " + response.getReturnMsg(); return false; } } catch (System.Net.WebException e) //无法连接到远程服务器,网络异常 { reject.setReturnMsg(e.Message); } catch (Exception ex)//抛出其他异常 { reject.setReturnMsg(ex.Message); } return false; } catch (Exception ex) { reject.setReturnMsg(ex.Message); return false; } } 6.工银二维码退款查询
实现订单退款成功状态未知时发起查询接口 /// /// 工银二维码退款查询 /// /// 支付时工行返回的用户唯一标识 /// 商户系统订单号 /// 行内系统订单号 /// 商户系统生成的退款编号 /// public static bool RejectQuery(string cust_id, string out_trade_no, string order_id, string reject_no, ref RejectQueryResponse rejectQuery) { try { string TradeDate = DateTime.Now.ToString("yyyyMMdd"); string TradeTime = DateTime.Now.ToString("HHmmss"); /// /// 非页面服务实现类(RSA加解密方式) /// /// 应用id /// RSA私钥 /// 网关公钥 /// 非页面服务实现类实例 DefaultIcbcClient client = new DefaultIcbcClient(APP_ID, SIGN_TYPE, MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); ///新建服务请求类实例 RejectQueryRequest request = new RejectQueryRequest(); ///新建服务请求类的业务参数类,该类为内部类 RejectQueryRequest.RejectQueryRequestBiz bizContent = new RejectQueryRequest.RejectQueryRequestBiz(); ///为请求类设置各种参数 request.setServiceUrl(ConfigurationManager.AppSettings["退货查询"].ToString()); bizContent.setmer_id(mer_id); bizContent.setcust_id(cust_id);//支付时工行返回的用户唯一标识 bizContent.setout_trade_no(out_trade_no);//商户系统订单号 bizContent.setorder_id(order_id);//行内系统订单号 bizContent.setreject_no(reject_no); request.setBizContent(bizContent); //同步调用并返回response响应类 RejectQueryResponse response = null; try { response = (RejectQueryResponse)client.execute(request); if (response.isSuccess()) { //成功 rejectQuery = response; return true; } else { //失败 String errormsg = "查询失败 : " + response.getReturnMsg(); rejectQuery = response; return false; } } catch (System.Net.WebException e) //无法连接到远程服务器,网络异常 { rejectQuery.setReturnMsg(e.Message); } catch (Exception ex)//抛出其他异常 { rejectQuery.setReturnMsg(ex.Message); } return false; } catch (Exception ex) { rejectQuery.setReturnMsg(ex.Message); return false; } }