V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jtping
V2EX  ›  问与答

微信支付回调问题

  •  1
     
  •   jtping · 2021-01-13 11:20:08 +08:00 · 4506 次点击
    这是一个创建于 1438 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是这样的最近在调小程序的支付接口,其他步骤基本上都已经没问题了,但是服务器端接收不到微信的回调请求,导致一直不能成功支付

    满足以下几点:

    1.外网能通过回调地址直接访问,没有登陆拦截

    2.请求格式为 https://xxxx.com/xxx/xxx 没有携带任何参数

    3.服务器端入方向的所有端口都对外开放

    找了一天了,还是找不到问题在哪,希望知道的大神指导指导我

    第 1 条附言  ·  2021-01-14 11:59:33 +08:00
    支付问题解决了

    我来说一下具体经过吧

    最开始我因为不熟悉微信支付流程,以为是回调方法的问题,实际上订单并没有支付成功,所以不可能会回调

    最开始用的是微信支付的 V3 版本,因为版本的原因,所以用了 RSA 加密,可能是 RSA 加密我哪一步出了问题,所以导致支付失败(微信支付的提示也太不友好了,就提示一个系统繁忙,目前也没找到具体原因)

    之后我改用老版本的微信支付,加密算法也改成 MD5 了,然后就解决了
    第 2 条附言  ·  2021-01-14 12:00:31 +08:00
    感谢各位大神指导!
    59 条回复    2021-01-14 09:50:59 +08:00
    yimity
        1
    yimity  
       2021-01-13 11:37:12 +08:00
    你在外网直接访问给微信的回调接口能不能访问到?
    ivanMeng
        2
    ivanMeng  
       2021-01-13 11:40:41 +08:00
    1.查看 nginx 日志是否有回调访问日志。
    2.代码之中提供 log 记录。
    3.微信本身存在问题几率极低。回调时间是逐渐变长。要开始的 15s/15s/30s......等
    4.增加主动查账业务 然后进行修改订单进行你接下来的业务
    jtping
        3
    jtping  
    OP
       2021-01-13 11:40:41 +08:00
    @yimity 能直接访问 但是微信回调就没反应
    qiayue
        4
    qiayue  
       2021-01-13 11:42:00 +08:00
    先看 nginx 确认微信到底有没有调你的接口。
    另外,回调地址是你下单时填进去的,会不会你填的是另一个地址。
    jtping
        5
    jtping  
    OP
       2021-01-13 11:43:52 +08:00
    看了一下 nginx 日志里没有记录
    jtping
        6
    jtping  
    OP
       2021-01-13 11:45:25 +08:00
    @qiayue 没有记录 下单时回调地址我输出了一下 没错的
    jtping
        7
    jtping  
    OP
       2021-01-13 11:47:29 +08:00
    @ivanMeng 没有微信回调请求的记录 我能确定回调方法没被调用
    R18
        8
    R18  
       2021-01-13 11:48:05 +08:00   ❤️ 1
    查下 CDN 的 WAF 是不是被拦截了。我前段时间才遇到过某家支付的回调被 CF 的 WAF 拦截掉了。
    hlwjia
        9
    hlwjia  
       2021-01-13 11:52:19 +08:00   ❤️ 1
    如果是之前没成功过,那就是微信支付后台哪里没配置白名单吧。

    如果是之前可以成功,突然不行了,那目前确实看不出哪里出问题(假设你那边已经排查完整)
    jtping
        10
    jtping  
    OP
       2021-01-13 11:53:43 +08:00
    @R18 我去看看!
    jtping
        11
    jtping  
    OP
       2021-01-13 12:01:11 +08:00
    @hlwjia 白名单是配了的 我去检查检查
    zpfhbyx
        12
    zpfhbyx  
       2021-01-13 12:01:30 +08:00
    let's encrypt 的证书 大概率会被拦截
    1iuh
        13
    1iuh  
       2021-01-13 12:05:05 +08:00
    服务器在哪里?
    qiayue
        14
    qiayue  
       2021-01-13 12:17:38 +08:00
    @jtping 后面解决问题了,麻烦在这里说下具体是什么问题,并 @楼上各位通知下大家
    jtping
        15
    jtping  
    OP
       2021-01-13 12:18:19 +08:00
    @1iuh 阿里云上
    jtping
        16
    jtping  
    OP
       2021-01-13 12:18:49 +08:00
    @qiayue okok
    Drumming
        17
    Drumming  
       2021-01-13 12:20:27 +08:00
    @zpfhbyx 这个坑似曾相识...好像遇到过...想不起来了...
    jtping
        18
    jtping  
    OP
       2021-01-13 12:26:44 +08:00
    @zpfhbyx DigiCert 的 手动狗头
    zpfhbyx
        19
    zpfhbyx  
       2021-01-13 12:46:34 +08:00
    @Drumming oscp 被 gg 之后。。
    micean
        20
    micean  
       2021-01-13 12:56:22 +08:00
    如果是沙箱的话,可以考虑是腾讯自己的问题,去开发社区问问吧。
    phpcxy
        21
    phpcxy  
       2021-01-13 13:11:29 +08:00
    试试先不用 https,直接 http 来一发
    rogwan
        22
    rogwan  
       2021-01-13 13:20:45 +08:00
    先去微信账户看下对账记录,确定付款状态;然后再检查有没有回调的请求;最后再看服务器处理请求成功的业务逻辑是不是写对了。
    TimPeake
        23
    TimPeake  
       2021-01-13 13:41:25 +08:00
    域名白名单之类的
    jtping
        24
    jtping  
    OP
       2021-01-13 13:59:16 +08:00
    @micean 测试环境
    jtping
        25
    jtping  
    OP
       2021-01-13 14:00:52 +08:00
    @rogwan 微信那边支付订单已经创建了 处于等待支付状态
    jtping
        26
    jtping  
    OP
       2021-01-13 14:04:05 +08:00
    @phpcxy 一开始我也以为是这个问题 后来看到说已经支持 https 了 就没在意 我去试试吧
    rogwan
        27
    rogwan  
       2021-01-13 14:14:06 +08:00 via Android
    @jtping 现在支付都还是待付款状态,那你应该检查支付环节,支付环节走完才会到回调。
    jtping
        28
    jtping  
    OP
       2021-01-13 14:19:01 +08:00
    @rogwan 调起支付输入密码后(不管密码对错) 微信提示系统繁忙 大概是这么个样子
    radiocontroller
        29
    radiocontroller  
       2021-01-13 14:19:36 +08:00
    现在钱还没付掉?
    ReinerShir
        30
    ReinerShir  
       2021-01-13 14:20:00 +08:00
    我记得测试环境沙箱模式是不能支付的,那么也就无法触发支付成功回调啊?
    jtping
        31
    jtping  
    OP
       2021-01-13 14:24:09 +08:00
    @radiocontroller 对的 微信那边处于待支付状态
    jtping
        32
    jtping  
    OP
       2021-01-13 14:25:13 +08:00
    @ReinerShir 不是沙箱模式
    Lemeng
        33
    Lemeng  
       2021-01-13 14:31:43 +08:00
    是不是账号状态异常
    yxzblue
        34
    yxzblue  
       2021-01-13 14:33:50 +08:00
    微信回调是 POST 请求
    jtping
        35
    jtping  
    OP
       2021-01-13 14:48:42 +08:00
    @yxzblue 我这边 post get 都接收的
    rogwan
        36
    rogwan  
       2021-01-13 14:51:45 +08:00 via Android
    @jtping 你可以看下微信报错的具体 error code,会提示错误类型的。猜测可能是你没有按微信要求生成正确的密钥证书,或者是支付开发者 ID 权限开通的不够。
    hlwjia
        37
    hlwjia  
       2021-01-13 14:51:49 +08:00
    啊。你用户那边都没支付成功啊? 那个回调是用户支付成功后才有的。

    如果 client 那边的支付出问题了,那估计是调用问题,参数啥的都检查一遍
    jtping
        38
    jtping  
    OP
       2021-01-13 14:56:33 +08:00
    @Lemeng 指的是微信账号吗
    jtping
        39
    jtping  
    OP
       2021-01-13 15:08:50 +08:00
    @rogwan 小程序那边给的报错是这个 requestPayment:fail cancel 支付取消了
    jtping
        40
    jtping  
    OP
       2021-01-13 15:10:57 +08:00
    @hlwjia 参数格式应该是没问题的 会不会是加密方式 我这边用的是 RSA
    qiayue
        41
    qiayue  
       2021-01-13 15:11:38 +08:00   ❤️ 1
    @jtping 支付取消,当然就没回调。
    你们自己付款测试,别等用户付。
    rogwan
        42
    rogwan  
       2021-01-13 16:23:48 +08:00 via Android   ❤️ 1
    @jtping 大概率是 #40 楼的问题,你重新走一遍生成加密证书再试。
    jtping
        43
    jtping  
    OP
       2021-01-13 16:32:37 +08:00
    @qiayue
    我们自己测试的

    密码输入后 一直是支付动画 然后就说系统繁忙

    我去支付平台看了下 是有订单生成的 状态是未支付
    jtping
        44
    jtping  
    OP
       2021-01-13 16:35:45 +08:00
    @rogwan 嗯 我再试试看
    jtping
        45
    jtping  
    OP
       2021-01-13 16:36:26 +08:00
    @rogwan 不过是能够调起支付界面的 是输入密码后 支付动画结束 提示系统繁忙的
    phpcxy
        46
    phpcxy  
       2021-01-13 16:38:02 +08:00
    原来是还未支付成功,那就还没到回调那一步了
    jtping
        47
    jtping  
    OP
       2021-01-13 16:40:56 +08:00
    @phpcxy 我一开始理解的是 要回调了之后才会成功...
    qiayue
        48
    qiayue  
       2021-01-13 17:18:01 +08:00
    daijialong
        49
    daijialong  
       2021-01-13 17:57:18 +08:00
    接口用什么语言写的?
    jtping
        50
    jtping  
    OP
       2021-01-13 18:03:29 +08:00
    xiangpeng
        51
    xiangpeng  
       2021-01-13 18:14:51 +08:00 via iPhone
    用户正常支付完才回调,订单状态未支付的话先排查支付问题吧
    sevenzhou1218
        52
    sevenzhou1218  
       2021-01-13 18:16:17 +08:00
    题外话,话说你不轮询吗?
    daijialong
        53
    daijialong  
       2021-01-13 18:18:01 +08:00
    @jtping 微信官方文档上看是 xml 方式传参 试着不指定请求的 Content-Type
    ByteChen
        54
    ByteChen  
       2021-01-13 19:10:40 +08:00
    在商户平台设置 apiv3key 了吗
    jtping
        55
    jtping  
    OP
       2021-01-14 09:24:09 +08:00
    @ByteChen 设置了的
    jtping
        56
    jtping  
    OP
       2021-01-14 09:24:43 +08:00
    @daijialong 我调的是 v3 版本的接口
    jtping
        57
    jtping  
    OP
       2021-01-14 09:25:39 +08:00
    @xiangpeng 嗯 开始是我理解错了 现在在往这个方向找
    jtping
        58
    jtping  
    OP
       2021-01-14 09:26:08 +08:00
    @sevenzhou1218 轮询啥...
    Achiii
        59
    Achiii  
       2021-01-14 09:50:59 +08:00
    支付成功才会回调。然后回调后处理业务逻辑把订单状态改成已支付....
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2906 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:13 · PVG 16:13 · LAX 00:13 · JFK 03:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.