微信支付
使用商家转账:/v3/fund-app/mch-transfer/transfer-bills ,appId:wx3f061fd153b6dbbc ,调用一直报 401 Unauthorized, Response Code: 401 2025-01-22 15:39:09 INFO [http-nio-8889-exec-3] com.qubian.user.util.WeChatPay - ac51f9647fe6c1dd 1753cc0a87bb7f44 - Response message:Unauthorized 2025-01-22 15:39:09 INFO [http-nio-8889-exec-3] com.qubian.user.util.WeChatPay - ac51f9647fe6c1dd 1753cc0a87bb7f44 - Error: Server returned HTTP response code: 401 for URL: https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills 自己做签名校验,正常,问一下,Wechatpay-Serial 必填 string 【微信支付公钥ID】或【微信支付平台证书序列号】 请求参数中的敏感字段,需要使用微信支付公钥加密(推荐),请参考获取微信支付公钥ID说明以及微信支付公钥加密敏感信息指引;也可以使用微信支付平台证书公钥加密,参考获取平台证书序列号、平台证书加密敏感信息指引 直接使用证书序列号就可以,还是需要使用.p12证书加密,再传?就返回Unauthorized,其他错误消息就没有返回,然后就不知道怎么弄了
微信的异步请求,<transaction_id><![CDATA[4200002532202501220797559574]]></transaction_id> ,商户侧收到了,但返回给微信端能收到吗?为什么微信端连续不停的发异步请求过来?
Exception in thread "main" com.wechat.pay.java.core.exception.HttpException at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.innerExecute(OkHttpClientAdapter.java:52) at com.wechat.pay.java.core.http.AbstractHttpClient.execute(AbstractHttpClient.java:46) at com.wechat.pay.java.core.certificate.CertificateDownloader.download(CertificateDownloader.java:82) at com.wechat.pay.java.core.certificate.AutoCertificateService.lambda$register$0(AutoCertificateService.java:66) at com.wechat.pay.java.core.certificate.AutoCertificateService.register(AutoCertificateService.java:72) at com.wechat.pay.java.core.certificate.RSAAutoCertificateProvider.<init>(RSAAutoCertificateProvider.java:40) at com.wechat.pay.java.core.certificate.RSAAutoCertificateProvider.<init>(RSAAutoCertificateProvider.java:19) at com.wechat.pay.java.core.certificate.RSAAutoCertificateProvider$Builder.build(RSAAutoCertificateProvider.java:139) at com.wechat.pay.java.core.RSAAutoCertificateConfig$Builder.build(RSAAutoCertificateConfig.java:117) at com.zjsy.certificate.utils.JsapiServiceExtensionExample.main(JsapiServiceExtensionExample.java:45) Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:210) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) at sun.security.ssl.InputRecord.read(InputRecord.java:503) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379) at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:336) at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:300) at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:185) at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.java:224) at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.java:108) at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.java:88) at okhttp3.internal.connection.Transmitter.newExchange(Transmitter.java:169) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:41) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229) at okhttp3.RealCall.execute(RealCall.java:81) at com.wechat.pay.java.core.http.okhttp.OkHttpClientAdapter.innerExecute(OkHttpClientAdapter.java:49) ... 9 more
为什么新版商家转账到零钱,拉起用户确认收款界面,但是用户关掉了并没有点击确认收款,用户此时没有收到款,这是正常的,但是查看商户运营号,这时候发现商户运营号的钱却被扣了,那这个钱扣到哪里了 [图片] 这两笔都是,拉起用户确认收款了,但是点击关闭,没有确认,钱却被扣了。
开发了一个web版的程序,需要微信支付,AppID填哪一个?现在申请的是微信一般商户,先谢谢了
[图片]
业务场景: 我司有一批车辆(归属于不同资产方)提供租赁服务,用户使用同一个用户端小程序进行租赁,生成交易订单。 业务需求: 同一个小程序内的租车业务订单,我们希望根据车辆的资产方进行收款,交易款直达对应资产方的微信商户(已在小程序内完成商户号关联)。 即: 用户租了一辆电动车(资产方为A),交易款项结算至A商户;用户租了一辆电动车(资产方为B),交易款项结算至B商户。 请问能否实现?可以的话需要如何操作? 另外,请问小程序关联商户号的有没有上限个数?
为什么微信付款时,单笔订单超过1万,就支付失败 ,提示 “调用支付JSAPI缺少参数: total_fee”,,,具体原因是什么呢? 小于1万是可以的,大于1万就失败了。 调用的是统一下单接口:/v3/pay/transactions/jsapi,,,这个接口返回值里prepay_id为空 。 金额是分的:1774000
后端生成签名代码 [图片] 返回给前端信息 [图片] 前端接收代码与错误显示 [图片] [图片]
[图片]
微信回调通知给了成功的应答体过了四个小时之后再一次给了通知
public function transfer($batch_name, $out_trade_no, $money, $openid) { $url = 'https://api.mch.weixin.qq.com/v3/transfer/batches'; $pars = []; $pars['appid'] = '*****';//直连商户的appid $pars['out_batch_no'] = $out_trade_no;//商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一 $pars['batch_name'] = $batch_name;//该笔批量转账的名称 $pars['batch_remark'] = $batch_name;//转账说明,UTF8编码,最多允许32个字符 $pars['total_amount'] = intval($money * 100);//转账总金额 单位为“分” $pars['total_num'] = 1;//转账总笔数 $pars['transfer_detail_list'][0] = [ 'out_detail_no' => 'transfer' . $out_trade_no, 'transfer_amount' => $pars['total_amount'], 'transfer_remark' => $batch_name, 'openid' => $openid ];//转账明细列表 $token = $this->getToken($pars);//获取token $res = $this->https_request($url, json_encode($pars), $token);//发送请求 $data = json_decode($res, true); return $data; } function https_request($url, $data = null, $token) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, (string)$url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //添加请求头 $headers = [ 'Authorization:WECHATPAY2-SHA256-RSA2048 ' . $token, 'Accept: application/json', 'Content-Type: application/json; charset=utf-8', 'User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36', ]; if (!empty($headers)) { curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); } $output = curl_exec($curl); curl_close($curl); return $output; } public function getToken($pars) { // $url = 'https://api.mch.weixin.qq.com/v3/certificates'; $url = 'https://api.mch.weixin.qq.com/v3/transfer/batches'; $http_method = 'POST';//请求方法(GET,POST,PUT) $timestamp = time();//请求时间戳 $url_parts = parse_url($url);//获取请求的绝对URL $nonce = $timestamp . rand('10000', '99999');//请求随机串 $body = json_encode((object)$pars);//请求报文主体 $stream_opts = [ "ssl" => [ "verify_peer" => false, "verify_peer_name" => false, ] ]; try { $certPem = $this->getCertPem(); $apiclient_cert_path = $certPem['certPem']; $apiclient_key_path = $certPem['keyPem']; $apiclient_cert_arr = openssl_x509_parse(file_get_contents($apiclient_cert_path, false, stream_context_create($stream_opts))); $serial_no = $apiclient_cert_arr['serialNumberHex'];//证书序列号 $mch_private_key = file_get_contents($apiclient_key_path, false, stream_context_create($stream_opts));//密钥 $merchant_id = '******'; $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : "")); $message = $http_method . "\n" . $canonical_url . "\n" . $timestamp . "\n" . $nonce . "\n" . $body . "\n"; openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption'); $sign = base64_encode($raw_sign);//签名 $schema = 'WECHATPAY2-SHA256-RSA2048'; $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"', $merchant_id, $nonce, $timestamp, $serial_no, $sign);//微信返回token } catch (\Exception $e) { // throw new BaseException(['msg' => $e->getMessage()]); return json(['code'=>1,'msg'=>$e->getMessage()]); } return $token; } /** * 获取cert证书文件 * @return array * @throws BaseException */ private function getCertPem() { // cert目录 $filePath = dirname(__DIR__) . '/public/cert/wechat/'; return [ 'certPem' => $filePath . 'apiclient_cert.pem', 'keyPem' => $filePath . 'apiclient_key.pem' ]; } //在别的方法里调用,报错{code: "INVALID_REQUEST", message: "Http头缺少Accept或User-Agent"} $res = $this->transfer('结算手工费', $out_trade_no, $craft_fee, $openid); return json($res);
商家转账接口transfer_amount字段传的30,商户余额1.98,调用的时候提示资金不足
怎么实现鸿蒙Next拉起微信并在微信内自动打开网页完成支付签约
[图片] 麻烦咨询下,合单支付的订单,退款次数是总的只有50次吗?即使有50个子单,也只能总共退50次?
二手回收行业,在回收机器时希望接微信信用体系,可以直接抵扣\降低用户的回收金额,用于3C数码等机器的回收。
营业执照已经注销掉了,还为什么把商户号不可以注销掉,注销为什么那么复杂,注销不了这个商户号,营业执照早就注销了号几年了,谢谢官方把1492732502这个商户号,给我处理注销掉, [图片]
/v3/profitsharing/orders 小程序交易被冻结,在用户主动/系统自动确认收货后才进行资金结算,详细规则可查看《交易类小程序运营规范》 如何操作? 而且微信公众平台-订单管理,这个分账订单状态是“已发货”,因为是虚拟产品发货选的是“虚拟发货”,这个要等系统自动收货才可以吗? 请问这个状态能查询到吗或者有收货的异步回调通知吗 [图片]
商户发起商家转账请求后,微信支付会持续尝试锁定商户资金。如果超过24小时仍余额不足或因其他原因导致无法转账,商家转账订单将会被关闭。 产品文档中仅说了这个
为什么我调用了传了openid,返回了WAIT_USER_CONFIRM ,而不是用户直接收到钱呢