首先感谢大佬“快乐树上快乐果”,没有他的支持,不知道要多踩多少坑,先贴上大佬的原文链接 以下代码可以直接运行,但是前提需要导入jar包,请自行去工行开放平台下载。 ps:工行的测试环境只有早上九点-下午四点可用(也没人跟我说过,自己发现的规律,后来被别人告知确实如此) 1.如果出现appid无效,没有权限,很可能是工行没有授权,或者就是工行给错了,url错误,再怎么搞都是白试。 总之在出现商品错误码之前,问题一定出现在appId,网关公钥,合作方私钥,url地址四个地方。 3.一旦出现商品错误码,就说明你离成功更进一步了,这时候就需要你根据提示,来找到自己bizContent中的错误。 总结:及时和工行反馈,很大程度上都是工行的问题,并不是你的demo有问题。我只想说,看似只有这么一点代码,但是其中的心酸真的一言难尽,和工行对接确实是太难了,毕竟对方也不是直接派技术人员和你对接,一般也只是普通业务员对接,一有问题,就让你提供上送报文和返回数据,真是太难了。 工行SDK链接 错误码对照表 测试网关公钥下载地址 商品错误码 工行demo的链接(这个demo的可用性并不高,不过看一下也是可以的,里面会有一些必填参数,我想说,工行这个页面看起来实在是不舒服,一个英语单词给你分成几行,我也是醉了) 希望能帮助到大家吧,这个仅仅是支付而已,退款还在研究当中,如果有大佬做过,还请大佬能指点一二,退款之后做出来的话,也会发出来。最后还是要感谢一下“快乐树上快乐果”,如果我的文章描述的不够详细,大家可以去参考他的文章,在我文章的顶部有他的链接。
https://blog.csdn.net/qq_39404258/article/details/103371256
(文章下半部分是SDK下载,网关公钥,错误码等链接)public class AggregatePayHidePayRequestV1Test { //appid需要工行提供 protected static final String APP_ID = "10000000000000188369"; //网关公钥(自行去工行开放平台下载) protected static final String APIGW_PUBLIC_KEY = "MIGfMA0GCSqGSIb66666AQUAA4GNADCBiQKBgQCwFgHD4kzEVPd12345tKM7KV+16bWZ5BMNgvEeuEQwfQYkRVwI9HFOGkwNTMn5hiJXHnlXYCX+zp5r6R52MY0O77777LT7aHaxsANsvI9ABGx3OaTVlPB59M6GPbJh0uXvio0m1r/lTW3Z60RU6Q3oid/rNhP3CiNgg88888AGqwIDAQAB"; //合作方私钥 protected static final String MY_PRIVATE_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC268A3frqjxUKdSye4RLIWgX+bOV5ooFODj0qYqRFGrazeVj4qhLAdQa8tY5ipiKS7VLMOtj+c26K3jeCiUJcGkd84qt3xsw7gPqVX9HkSs2IG1cbCS8LnyTSP88GOMuIvSLBcUSda41RbYCEx75eac8vLui9wklEPKXNvuZbrKeTfYZY68tuD8jKV/yyLp+5Mp4RylWXIQ+xv55X7LPhP2l8zqUXQQO8Rv5fziJ8aJcm1CqssTS5TB02Mj7Y1RsMKj07NDNz3F2jKUl86chRkckpQFpD5R2UEiiPqw76VEix1QNDIAt0Ol7scKjq/gYBzw1X2ymFPcsqBnU11Px11111BAAECggEBAIj/sIrfw3F9ABNGgo0kBi2M98GOCgNacLIL09baaTICSYKMHStDDZQb6dOY0HHJAXe8TA8suCAG76uB+0gWC8bD4edTMb8gWHfi83sYgsVazIRJ//7tNyDaNR/LdJ/HxFednVjG/y63LCrzqGj6BRWMvIns/23456Yz+V0oJrwg8ds4Zw9Qf81Tg/U99jQK2y++UvwKfsm0hhkpUCN9G/GbJMRVPUgUqJ3S1mMl5Q6x5/wczUVrlx3prsU7yS+gLM7N3mZwJDPqsg2T8ZFJfdxGk2hdwJYigU+QKqjn/ZumUV2wcRBvCLeawVlx5wlM4Vay2+33333yiHmCOS/NUMECgYEA9Fj8dR6b9hmoNZ639yyap5WMhodYDv2ca3bGpUwyGQgucHyqleMl8cNVbVBAReEELVeLCjiFSRYD8Smn9hWSt5Hmk+aJkb5EJ6A9h/gB1ClFqK+6GIueZIL8REIwcCrKGw7OxaYrqg+pP9MhOxLF0tE5/Kw7uj7WJD3TdQs8MxkCgYEAv6Tc6H3/Z5tMQWPVw0P3mrwQERQ0ipIPCz0vKVH4RHKMVbF/ZgaBZfrX9pOHug/5wAIY4Ax/gDc66dEbXy4nWRAq0gj2xe7f3avQIA/qR0CjUWqylagpmXT3chWrvmJqtvu/LXIo2QuOUp+zW15FVYk222224BE3i+UPXXE56789gYAHT7ZWJtFR3tiqqhIlIj+Kbi4jRF99K1eH26j7/zisiRMiqIhOLdrPziF7QOB7ds0yMiFl7+UFF9SMXcu50FFwjrwQhuBs7P2LFf9hVylu2MFN19xAqcTWixjTTgu2/4DGqH3FakB6OTe+QioHY3tp4HrUta6f1wt/UB5IrUpi2QKBgQCSOaPIzWKUVh1QA3H2RKTnbrk/ntAcLyfFZpDWkVHCQDitpfpUCYCwJD6mSJkWMdxZUgBS65ZZaUrNXxzoednSDhDuI6LPEd3EULVD0YDrjvlORQAwSpg7G9E2PizF3mgYaGvNrD5YpYWZq3r5qytyAXxW7Lx08Q4V8tfPb1vttwKBgC1XfXD9LcTpTjB6d0DzexxRj1PC8Ve/cwj99sJsoeR7WAjQJD+VgLTwVpXdvQW43Z554VzJbduF6NmP7/iNyTwh/phaeQ2xJS4Oham2I8uBjm7vo6so+HlvCT1MBM2bl5Aq2VlCui7wn4+lJow+af8MhaIFcd+g6Rtky3h7C7FL"; @Test public void test_cop() { //这里必须用RSA2 DefaultIcbcClient client = new DefaultIcbcClient(APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY, APIGW_PUBLIC_KEY); AggregatePayHidePayRequestV1 request = new AggregatePayHidePayRequestV1(); //url地址,工行提供 request.setServiceUrl("https://apiyyh3.wmmnet.com.cn/api/mybank/pay/aggregatepay/hidepayrequest/V2"); AggregatePayHidePayRequestV1Biz bizContent = new AggregatePayHidePayRequestV1Biz(); //为什么要加上13天,因为工行测试环境有一个时间对照表(直接找工行要,不然时间对不上,就会出现商品不在时间范围内的错误) Calendar nowTime = Calendar.getInstance(); nowTime.add(Calendar.DATE, 13); String startToday = new SimpleDateFormat("YYYYMMddHHmmss").format(nowTime.getTime()); Calendar nowTime2 = Calendar.getInstance(); nowTime2.add(Calendar.MINUTE, 10); String endToday = new SimpleDateFormat("YYYYMMddHHmmss").format(nowTime.getTime()); bizContent.setOutTradeNo(startToday); //商户订单号;需保证商户系统唯一 bizContent.setOrderChannel("100"); // 下单发起渠道,100对应微信小程序, 101对应微信公众号,102对应支付宝生 活号 bizContent.setTpAppId("wx042eb3cdfb2f16b9"); // 第三方应用ID;商户在微信公众号或小程序内接入时必送,上送微信分配的公众账号ID或小程序appid;商户通过支付宝生活号接入时必送,上送支付宝分配的应用ID。目前暂不支持上送 bizContent.setMerId("1xxxxxxxxxx2"); // 商户号 一般为12位 bizContent.setTpOpenId("oMS777eFXA_666xjdCgJe888HeeU"); //第三方用户标识;商户在微信公众号/支付宝生活号/小程序内接入时必送,上送用户在商户appid下的唯一标识。 目前暂不支持上送。 bizContent.setTranType("OfflinePay"); //交易类型。用于区分交易场景为线上支 付还是线下支付,对应数据字典: OfflinePay-线下支付,OnlinePay-线上 支付。(这里统一填线下支付,工行要求的) bizContent.setOrderDate(startToday); //交易提交时间, 格式为: YYYYMMDDHHmmss bizContent.setEndTime(endToday); // 交易过期时间 bizContent.setGoodsBody("可乐"); bizContent.setInstallTimes("1");//统一为1 bizContent.setOrderAmount("1000"); //总金额(单位:分) bizContent.setSpbillCreateIp("127.0.0.1"); //请求发起终端ip(商户后台发起请求的服务器IP地址,如果获取不到上送127.0.0.1即可) bizContent.setNotifyUrl("https://127.0.0.1/servlet/ICBCOFSTEBizServlet"); bizContent.setNotifyType("HS"); //通知类型,表示在交易处理完成后把交 易结果通知商户的处理模式。 取 值“HS”:在交易完成后将通知信息,主 动发送给商户,发送地址为notify_url指 定地址; 取值“AG”:在交易完成后不通 知商户 bizContent.setReturnUrl("https://paycenter.uboxol.com/payment/notify"); bizContent.setInterfaceVersion("1.1.0.0"); //接口号,目前仅支持上送1.1.0.0 bizContent.setResultType("0"); request.setBizContent(bizContent); AggregatePayHidePayResponseV1 response; try { response = client.execute(request); System.out.println(response.getReturnCode()+"-----------"); if (response.getReturnCode()==0) { // 业务成功 String prepayId = response.getPrepayId(); System.out.println(prepayId); } else { // 业务失败 } } catch (IcbcApiException e) { e.printStackTrace(); } } }
2.如果一直出现400017错误,你就要考虑是不是自己的秘钥有问题,找工行确认,公钥是否已经授权,以及秘钥的准确性。
4.当成功返回数据之后,会有一个sign_data,但是它是base64编码,需解码,解码完之后会有一串内容,用于唤起小程序支付即可。
5.小程序官方API里的小程序支付提示的是MD5加密,不要管这个,直接使用RSA,signType为RSA。
https://open.icbc.com.cn/icbc/apip/docs_sdk&demo.html
对照表链接
https://open.icbc.com.cn/icbc/apip/faq_detail.html?id=10000000000000001045
https://open.icbc.com.cn/icbc/apip/faq_detail.html?id=10000000000000002004
错误码 错误说明
96314025 商户上送的订单不在有效时间范围内。
96314026 检查订单时间是否在有效范围内出错。
96112318 商户上送的订单不在有效时间范围内。
96314408 订单分解有误,请校验订单!
96112318 商户代码有误
96314023 商户上送订单信息中通知地址项不能为空。
96314024 商户上送订单信息中通知地址项错误。
96314132 商户上送订单信息中通知类型错误。
96114739 该商户未开通微信支付
96114740 该商户未开通支付宝支付
https://open.icbc.com.cn/icbc/apip/api_detail.html?apiId=10000000000000046000&baseUrl=%2Fmybank%2Fpay%2Faggregatepay&resUrl=%2Fhidepayrequest&version=V1&apiName=%E5%B9%B3%E5%8F%B0%E5%85%AC%E4%BC%97%E5%8F%B7%E5%8F%8A%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%9F%8B%E5%90%8D%E8%81%9A%E5%90%88%E6%94%AF%E4%BB%98&serviceId=P0067&resourceId=10000000000000004420
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算