Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

几个小建议 #10

Closed
shizhice opened this issue Sep 7, 2017 · 5 comments
Closed

几个小建议 #10

shizhice opened this issue Sep 7, 2017 · 5 comments

Comments

@shizhice
Copy link

shizhice commented Sep 7, 2017

  1. 异步回调,您只对签名进行了验签。建议,进行一次主动查询,以确保订单真实完成。
  2. 支付宝、微信,他们各自在不同gateway的验签规则基本一致。下面这步中的gateway是否可以去掉。

wx20170907-090928 2x

3. 响应支付宝、微信的异步回调。应该有两种方式,返回成功或者返回失败(用于项目没有正确完成订单支付完成后的后续操作。响应第三方失败,便于第三方再次发起回调请求)。微信好像是要返回xml。

成功:

$data = ["return_code" => "SUCCESS", "return_msg" => "SUCCESS"];
echo $this->toXml($data);

失败:

$data = ["return_code" => "FAIL", "return_msg" => "ERROR"];
echo $this->toXml($data);

支付宝则需要返回success或者failure

建议形式修改为:

$pay = (new Pay($this->config))->driver('alipay');
if(! $pay->verify($request->all())) {
    return $pay->replyErrorNotify();
}
return $pay->replySuccessNotify();
  1. 希望新增主动查询订单状态功能。原因有二:

第一,您在接受支付宝、微信异步通知后,只进行了验签工作,个人觉得,这里应该在主动查询下第三方,以确保订单完成支付。防止秘钥暴露等其他情况,导致验签结果与实际情况不符。
第二,当订单涉及到有自动取消时间的时候,这样就需要我们使用脚本定时取消第三方订单。以免用户订单已取消,但实际第三方支付还是可以继续操作。我记得好像,调用微信的取消订单接口。不管订单号是否真实存在,都会返回成功。而支付宝貌似只有关闭订单操作。如果支付包订单已经支付完成,我们因为其他原因没有及时接到支付宝的异步通知,这时候,我们主动请求关闭订单,支付宝会将已经支付完成的地方关闭,并退款。
故而希望,新增主动查询订单状态功能

  1. 希望补充完善支付log功能,用monolog/monolog实现就不错。最好log地址可自定义配置

  2. 代码最好【便于】使用者扩展其他支付(苹果内支付、银联支付等等)。

@shizhice
Copy link
Author

shizhice commented Sep 7, 2017

还有一个小建议。支付包当面付和app支付的配置文件可能不同,按照您目前的做法,如果把第三方的配置文件写在同意配置文件的时候,用起来就不是很方便了。
目前我使用您的sdk,基本上是这样操作的

  $orderResult = (new Pay(["wechat" => config("payment")["wechat"]]))
                            ->driver('wechat')
                            ->gateway("scan")
                            ->pay($config_biz);
  $orderResult = (new Pay(["wechat" => config("payment")["wechat_app"]]))
                            ->driver('wechat')
                            ->gateway("app")
                            ->pay($config_biz);

@shizhice
Copy link
Author

shizhice commented Sep 7, 2017

刚阅读您sdk中的readme,并未写微信 app支付 对应的 driver和gateway。虽然,明眼人一人就行看出来。但是做科学要严谨😁😁😁

wx20170907-094443 2x

@yansongda
Copy link
Owner

yansongda commented Sep 7, 2017

异步回调,您只对签名进行了验签

  1. SDK 只对服务端消息进行签名验证。您说的再次对订单进行查询这个功能,是应用逻辑层面,不在本 SDK 应用范围内。需要应用逻辑层面自行调用 find 接口进行查询。

支付宝、微信,他们各自在不同gateway的验签规则基本一致。

  1. 各个支付网关验签确实都是一样的,这个暂时没有计划,所以,可能会在后续版本中进行修改。

响应支付宝、微信的异步回调

  1. 同样是应用逻辑层面的,不在本 SDK 讨论范围内,不过您提出的将回复做成 function 这个功能的确值得考虑,会在后续版本中增加这个 feature。

希望新增主动查询订单状态功能。

  1. 同 1

希望补充完善支付log功能,用monolog/monolog实现就不错。

  1. 想到一块去了,已经有计划,将会在后续大版本中进行代码重构

代码最好【便于】使用者扩展其他支付(苹果内支付、银联支付等等)。

  1. 代码结构、扩展性是没问题的,您可以看看代码结构与代码,这也是我启动这个项目的原因。欢迎您 PR。

还有一个小建议…………

  1. 微信的 APP 支付和 小程序支付 涉及到单独的 APP_ID ,所以,我在说明文档中也有说明,他们的配置是不一样的。如果您使用 laravel,您可以使用 laravel-pay 这个扩展包,看看具体配置信息。
$config = [
    'wechat' => [
        'miniapp_id' => '',             // 小程序APPID
        'mch_id' => '',             // 微信商户号
        'notify_url' => '',
        'key' => '',                // 微信支付签名秘钥
        'cert_client' => './apiclient_cert.pem',        // 客户端证书路径,退款时需要用到
        'cert_key' => './apiclient_key.pem',            // 客户端秘钥路径,退款时需要用到
    ],
];
$config = [
    'wechat' => [
        'appid' => '',              // APPID
        'mch_id' => '',             // 微信商户号
        'notify_url' => '',
        'key' => '',                // 微信支付签名秘钥
        'cert_client' => './apiclient_cert.pem',        // 客户端证书路径,退款时需要用到
        'cert_key' => './apiclient_key.pem',            // 客户端秘钥路径,退款时需要用到
    ],
];

未写微信 app支付 对应的 driver和gateway

  1. 这个是我失误,忘记补充了,因为这个 Gateway 是后来增加的。现已完善。

感谢您的支持!

欢迎您 ISSUE 和 PR!

@shizhice
Copy link
Author

shizhice commented Sep 7, 2017

个人觉得,一个好的SDK,就应该傻瓜式操作。
一直想自己做一个,苦于工作已搁置(现已997),逛社区,看到您的这个package,狂喜。故多说两句。
持续关注中...

@yansongda
Copy link
Owner

v2.0.0 版本已经增加了支持。目前已经开发完成,版本号为 v2.0.0-beta,邀请您试用。

感谢您的支持!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants