项目实战工商银行支付对接
。NET对接工商银行支付对接
项目中遇到对接【工商银行扫码支付】的同学可以参考使用1。接口调用事项需使用RSA2加密方式可以使用官方SDK方式调用或直接调用API传输过程中注意API开放平台通用参数需要URLEncode,bizcontent在form的body中提交,form中要指明ContentType属性,ContentType:applicationxwwwformurlencoded。需要准备APPID,MYPRIVATEKEY:RSA私钥,APIGWPUBLICKEY:网关公钥2。对接流程图
3。工银扫码支付接口
实现扫客户二维码完成支付业务summary工银二维码被扫支付summaryparamnameTypeparamparamnameDealIDparamparamnamenAmountparamreturnsreturnspublicstaticboolPay(stringDealID,stringnAmount,stringqrcode,refPayResponseV2pay){try{stringTradeDateDateTime。Now。ToString(yyyyMMdd);stringTradeTimeDateTime。Now。ToString(HHmmss);summary非页面服务实现类(RSA加解密方式)summaryparamnameAPPID应用idparamparamnameMYPRIVATEKEYRSA私钥paramparamnameAPIGWPUBLICKEY网关公钥paramreturns非页面服务实现类实例returnsDefaultIcbcClientclientnewDefaultIcbcClient(APPID,SIGNTYPE,MYPRIVATEKEY,APIGWPUBLICKEY);新建服务请求类实例PayRequestV2requestnewPayRequestV2();新建服务请求类的业务参数类,该类为内部类PayRequestV2。PayRequestV2BizbizContentnewPayRequestV2。PayRequestV2Biz();为请求类设置各种参数request。setServiceUrl(ConfigurationManager。AppSettings〔被扫支付〕。ToString());bizContent。setmerid(merid);bizContent。setqrcode(qrcode);bizContent。setOutTradeNo(DealID);bizContent。setOrderAmt(nAmount);bizContent。setTradeDate(TradeDate);bizContent。setTradeTime(TradeTime);request。setBizContent(bizContent);同步调用并返回response响应类PayResponseV2responsenull;try{response(PayResponseV2)client。execute(request);if(response。isSuccess()){成功payresponse;returntrue;}else{失败Stringerrormsg支付失败:response。getReturnMsg();payresponse;returnfalse;}}catch(System。Net。WebExceptione){pay。setReturnMsg(e。Message);returnfalse;}}catch(Exceptionex){pay。setReturnMsg(ex。Message);returnfalse;}}4。工银订单查询
实现支付成功后查询查询订单summary工银二维码查询summaryparamnamecustid支付时工行返回的用户唯一标识paramparamnameouttradeno商户系统订单号paramparamnameorderid行内系统订单号paramreturnsreturnspublicstaticboolQuery(stringcustid,stringouttradeno,stringorderid,refQueryResponsequery){try{stringTradeDateDateTime。Now。ToString(yyyyMMdd);stringTradeTimeDateTime。Now。ToString(HHmmss);summary非页面服务实现类(RSA加解密方式)summaryparamnameAPPID应用idparamparamnameMYPRIVATEKEYRSA私钥paramparamnameAPIGWPUBLICKEY网关公钥paramreturns非页面服务实现类实例returnsDefaultIcbcClientclientnewDefaultIcbcClient(APPID,SIGNTYPE,MYPRIVATEKEY,APIGWPUBLICKEY);新建服务请求类实例QueryRequestrequestnewQueryRequest();新建服务请求类的业务参数类,该类为内部类QueryRequest。QueryRequestBizbizContentnewQueryRequest。QueryRequestBiz();为请求类设置各种参数request。setServiceUrl(ConfigurationManager。AppSettings〔查询〕。ToString());bizContent。setmerid(merid);bizContent。setcustid(custid);支付时工行返回的用户唯一标识bizContent。setouttradeno(outtradeno);商户系统订单号bizContent。setorderid(orderid);行内系统订单号request。setBizContent(bizContent);同步调用并返回response响应类QueryResponseresponsenull;try{response(QueryResponse)client。execute(request);if(response。isSuccess()){成功queryresponse;returntrue;}else{失败queryresponse;Stringerrormsg查询失败:response。getReturnMsg();returnfalse;}}catch(System。Net。WebExceptione)无法连接到远程服务器,网络异常{query。setReturnMsg(e。Message);returnfalse;}catch(Exceptionex)抛出其他异常{query。setReturnMsg(ex。Message);returnfalse;}returnfalse;}catch(Exceptionex){query。setReturnMsg(ex。Message);returnfalse;}}5。工银二维码退款
实现工商银行订单退款summary工银二维码退款summaryparamnamecustid支付时工行返回的用户唯一标识paramparamnameouttradeno商户系统订单号paramparamnameorderid行内系统订单号paramparamnamerejectno商户系统生成的退款编号paramparamnamerejectamt退款金额,单位:分paramparamnameoperid操作人员IDparamreturnsreturnspublicstaticboolReject(stringcustid,stringouttradeno,stringorderid,stringrejectno,stringrejectamt,stringoperid,refRejectResponsereject){try{stringTradeDateDateTime。Now。ToString(yyyyMMdd);stringTradeTimeDateTime。Now。ToString(HHmmss);summary非页面服务实现类(RSA加解密方式)summaryparamnameAPPID应用idparamparamnameMYPRIVATEKEYRSA私钥paramparamnameAPIGWPUBLICKEY网关公钥paramreturns非页面服务实现类实例returnsDefaultIcbcClientclientnewDefaultIcbcClient(APPID,SIGNTYPE,MYPRIVATEKEY,APIGWPUBLICKEY);新建服务请求类实例RejectRequestrequestnewRejectRequest();新建服务请求类的业务参数类,该类为内部类RejectRequest。RejectRequestBizbizContentnewRejectRequest。RejectRequestBiz();为请求类设置各种参数request。setServiceUrl(ConfigurationManager。AppSettings〔退款〕。ToString());bizContent。setmerid(merid);bizContent。setcustid(custid);支付时工行返回的用户唯一标识bizContent。setouttradeno(outtradeno);商户系统订单号bizContent。setorderid(orderid);行内系统订单号bizContent。setrejectno(rejectno);bizContent。setrejectamt(rejectamt);bizContent。setoperid(rejectno);request。setBizContent(bizContent);同步调用并返回response响应类RejectResponseresponsenull;try{response(RejectResponse)client。execute(request);if(response。isSuccess()){成功rejectresponse;returntrue;}else{失败rejectresponse;Stringerrormsg退款失败:response。getReturnMsg();returnfalse;}}catch(System。Net。WebExceptione)无法连接到远程服务器,网络异常{reject。setReturnMsg(e。Message);}catch(Exceptionex)抛出其他异常{reject。setReturnMsg(ex。Message);}returnfalse;}catch(Exceptionex){reject。setReturnMsg(ex。Message);returnfalse;}}6。工银二维码退款查询
实现订单退款成功状态未知时发起查询接口summary工银二维码退款查询summaryparamnamecustid支付时工行返回的用户唯一标识paramparamnameouttradeno商户系统订单号paramparamnameorderid行内系统订单号paramparamnamerejectno商户系统生成的退款编号paramreturnsreturnspublicstaticboolRejectQuery(stringcustid,stringouttradeno,stringorderid,stringrejectno,refRejectQueryResponserejectQuery){try{stringTradeDateDateTime。Now。ToString(yyyyMMdd);stringTradeTimeDateTime。Now。ToString(HHmmss);summary非页面服务实现类(RSA加解密方式)summaryparamnameAPPID应用idparamparamnameMYPRIVATEKEYRSA私钥paramparamnameAPIGWPUBLICKEY网关公钥paramreturns非页面服务实现类实例returnsDefaultIcbcClientclientnewDefaultIcbcClient(APPID,SIGNTYPE,MYPRIVATEKEY,APIGWPUBLICKEY);新建服务请求类实例RejectQueryRequestrequestnewRejectQueryRequest();新建服务请求类的业务参数类,该类为内部类RejectQueryRequest。RejectQueryRequestBizbizContentnewRejectQueryRequest。RejectQueryRequestBiz();为请求类设置各种参数request。setServiceUrl(ConfigurationManager。AppSettings〔退货查询〕。ToString());bizContent。setmerid(merid);bizContent。setcustid(custid);支付时工行返回的用户唯一标识bizContent。setouttradeno(outtradeno);商户系统订单号bizContent。setorderid(orderid);行内系统订单号bizContent。setrejectno(rejectno);request。setBizContent(bizContent);同步调用并返回response响应类RejectQueryResponseresponsenull;try{response(RejectQueryResponse)client。execute(request);if(response。isSuccess()){成功rejectQueryresponse;returntrue;}else{失败Stringerrormsg查询失败:response。getReturnMsg();rejectQueryresponse;returnfalse;}}catch(System。Net。WebExceptione)无法连接到远程服务器,网络异常{rejectQuery。setReturnMsg(e。Message);}catch(Exceptionex)抛出其他异常{rejectQuery。setReturnMsg(ex。Message);}returnfalse;}catch(Exceptionex){rejectQuery。setReturnMsg(ex。Message);returnfalse;}}