Jeepay开源版使用过程中踩过的坑

朱治龙
2023-12-13 / 0 评论 / 90 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年12月18日,已超过332天没有更新,若内容或图片失效,请留言反馈。

1、商户系统登录问题

添加商户的时候有设置登录名,但是没有设置账号密码的位置,好不容易找到对商户重置密码的地方,但是那个勾选重置密码的复选框又超级容易被理解为用户下次登录需重置密码的配置项。
勾选后有提示重置为默认密码,但是又没有说明默认密码是什么,然后非得要查看源码才知道是通过常量设置的默认密码为:jeepay666
lq3ihzp2.png

2、证书文件不存在问题

好不容易登录商户系统了,进行支付测试的功能验证,提示证书文件不存在:
lq3iq5tq.png

整个应用部署过程完全是基于官方提供的 docker-compose.yml 文件,最后发现默认配置的 /home/jeepay/upload 目录根本就没有挂载到宿主机,修改 docker-compose.yml ,payment、manager、merchant 应用的 volumes 应用均挂载 /home/jeepay 目录,如:

    volumes:
      - ./jeepayData:/home/jeepay

3、支付测试不显示二维码的问题

支付测试时不显示支付二维码,发现HTTP请求中有个 404 请求:
lq3k6rgh.png
检查代码,确定应用存在对应的接口路径:
lq3k7wab.png

查看docker 日志复现如下 error 信息:
lq3ked1i.png

基于该信息可得知,nginx在接收到二维码图片请求时根本就没有请求到 jeepay-payment 这个后端服务,而是直接请求了root 目录中的文件,由此我们调整一下 代理的api接口的优先级,修改 jeepay-ui 根目录下的 default.conf.template 文件,在/api/ 前添加 ^~ ,nginx的路径匹配规则如下:

  • /:通用匹配,任何请求都可以匹配
  • =:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
  • ~:用于表示uri包含正则表达式,并且区分大小写。
  • ~*:用于表示uri包含正则表达式,并且不区分大小写。
  • ^~:用于不包含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri与请求字符串做匹配。
  • !~和!~*:分别表示区分大小写不匹配和不区分大小写不匹配的正则
  • 优先级:= --> ^~ --> /* #当有多个包含/进行正则匹配时,选择正则表达式最长的location配置执行。
  • 多个location配置的情况下匹配顺序为: 首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
  • 注意:如果uri包含正则表达式,则必须要有 ~ 或者 ~ 标识。

修改后的 default.conf.template 文件如下所示:

server {
    listen      80;
    listen      [::]:80;
    server_name localhost;
    root        /workspace/;

    try_files $uri $uri/ /index.html;

    location ^~ /api/ {
        proxy_next_upstream http_502 http_504 error timeout invalid_header;

        proxy_pass http://$BACKEND_HOST;

        proxy_set_header Host  $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # favicon.ico
    location = /favicon.ico {
        log_not_found off;
        access_log    off;
    }

    # robots.txt
    location = /robots.txt {
        log_not_found off;
        access_log    off;
    }

    # assets, media
    location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
        expires    7d;
        access_log off;
    }

    # svg, fonts
    location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
        add_header Access-Control-Allow-Origin "*";
        expires    7d;
        access_log off;
    }

    # gzip
    gzip            on;
    gzip_vary       on;
    gzip_proxied    any;
    gzip_comp_level 6;
    gzip_types      text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
}

4、公众号/小程序支付的URL多了一级/cashier

应用部署完毕,进行支付测试时,采用「微信支付二维码」的方式已支付成功,但是采用「公众号/小程序」的支付方式,在扫码后,发现扫码后的页面显示空白,进一步排查,发现是由于页面的css和js资源文件404导致的,进一步排查,是由于请求的资源多了一级path,一下是问题排查过程:
系统配置中的支付网关地址填写的是 https://jeepay-cashier.work.zhuzhilong.com
lq4l4c9n.png
但是在使用支付测试功能,支付方式采用「公众号/小程序」进行支付测试时,生成的二维码如下:
lq4l6e5f.png
二维码识别后的地址为:https://jeepay-cashier.work.zhuzhilong.com/cashier/index.html#/hub/78d439f3140fe4047c7f8f6cda1048313636890021b83c0c167270dbce4fc2ff
lq4l8r7n.png
根据应用部署情况,比预期的访问路径多了 /cashier,查看源代码后,发现这个路径是写死在 com.jeequan.jeepay.core.model.DBApplicationConfig.java中的:
lq4lf8pm.png
去掉相关方法中的 /cashier 后,根据 docker-compose.yml 重新构建镜像及重启服务后,可正常支付。

0

评论 (0)

取消