Giter VIP home page Giter VIP logo

pay's People

Contributors

50634235 avatar dependabot[bot] avatar gitbook-bot avatar guanguans avatar hmingv avatar iidestiny avatar involvements avatar isszz avatar iwzh avatar jieanthony avatar kanghuli avatar krissss avatar leo108 avatar liasica avatar limingxinleo avatar linhaijian99 avatar lisqorz avatar lscgzwd avatar qfz9527 avatar qq690712575 avatar taobig avatar wizardpro avatar woodongwong avatar wsmallnews avatar wyzheng1997 avatar xiaohe4966 avatar xiaozan avatar yansongda avatar yi-pixel avatar zhmuyu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pay's Issues

请求过去直接报500

问题描述

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at [email protected] to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

get方式测试支付 请求过去直接报500

代码

[ 'app_id' => 'wx9c1fa5f5157b8888', 'mch_id' => '1490434922', 'notify_url' => 'http://cherishna.natapp1.cc/wxpay/paysuccess', 'key' => 'huayuanmeiyehuayuanmeiyehuayuanm', 'cert_client' => public_path() . '/apiclient_cert.pem', 'cert_key' => public_path() . '/apiclient_key.pem', ], ]; } /** * 支付方法 */ public function dopay() { // $ticketOrder = json_decode($request->input('order')); $wxOrder = [ 'out_trade_no' => 'test1', 'total_amount' => '1', 'subject' => 'test subject', 'spbill_create_ip' => '8.8.8.8', 'openid' => 'obkSg1KweqWKe4aFG_g8VTsdvvtY', ]; $pay = new Pay($this->config()); $result = $pay->driver('wechat')->gateway('mp')->pay($wxOrder); dd($result); } /** * 支付回调 */ public function paysuccess(Request $request) { $pay = new Pay($this->config()); $verify = $pay->driver('wechat')->gateway('mp')->verify($request->getContent()); if ($verify) { file_put_contents('notify.txt', "收到来自微信的异步通知\r\n", FILE_APPEND); file_put_contents('notify.txt', '订单号:' . $verify['out_trade_no'] . "\r\n", FILE_APPEND); file_put_contents('notify.txt', '订单金额:' . $verify['total_fee'] . "\r\n\r\n", FILE_APPEND); } else { file_put_contents(storage_path('notify.txt'), "收到异步通知\r\n", FILE_APPEND); } echo "success"; } } - ## 报错详情 500

Missing Config -- [appid]

问题描述

按照文档上写的代码,直接请求提示 Missing Config -- [appid]

代码

public function wxPay(){
$config = [
'wechat' => [
'app_id' => 'xxx',
'mch_id' => 'xxx',
'notify_url' => 'http://yansongda.cn/wechat_notify.php',
'key' => 'xxx',
'cert_client' => './apiclient_cert.pem',
'cert_key' => './apiclient_key.pem',
],
];
$config_biz = [
'out_trade_no' => 'e2',
'total_fee' => '1', // 单位:分
'body' => 'test body',
'spbill_create_ip' => '8.8.8.8',
'openid' => '123',
];

    $pay = new Pay($config);

    return $pay->driver('wechat')->gateway('app')->pay($config_biz);
}

报错详情

Alipay Sign verify FAILED

包版本号

^2.0

问题描述

异步通知总是Alipay Sign verify FAILED,我是沙盒测试,不知道是才有这问题 还是犯了什么错误

代码

涉及到 异步通知、同步通知 的问题,请将 nginx/Apache 的相关日志贴出来
$alipay = PayApi::alipay( $config );
$data = $alipay->verify(); // 是的,验签就这么简单!

报错详情

Alipay Sign verify FAILED

支付宝退款问题

问题描述

支付宝退款调用不成功,是不是我这配置有问题,求解

代码

    $config_biz = [
        'out_trade_no' => $TempOrderId,      // 订单号
        'refund_amount' => $price,       //退款金额
        'subject' => '正常退款',       //订单标题
    ];
    $pay = new pay($this->config);
    $resultCode = $pay->driver('alipay')->gateway('Web')->refund($config_biz);

报错详情

cURL error 35: timed out before SSL handshake (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

微信公众号支付时,timeStamp参数类型

问题描述

在做Api接口时返回给前端的timeStamp类型是Int类型,当jsApi直接调用此返回参数时,报错timeStamp不存在,改为String类型就好了,建议直接在生成支付参数时就改为String类型

代码

public function pay(array $config_biz = [])
    {
        if (is_null($this->user_config->get('app_id'))) {
            throw new InvalidArgumentException('Missing Config -- [app_id]');
        }
        $payRequest = [
            'appId'     => $this->user_config->get('app_id'),
        -   'timeStamp' => time(),
        +   'timeStamp' => (string)time(),
            'nonceStr'  => $this->createNonceStr(),
            'package'   => 'prepay_id='.$this->preOrder($config_biz)['prepay_id'],
            'signType'  => 'MD5',
        ];
        $payRequest['paySign'] = $this->getSign($payRequest);
        return $payRequest;
    }

小程序支付getResult error:签名错误

问题描述

小程序支付getResult error:签名错误,miniapp_id、mch_id、key核对好几遍了没有问题,但是还是一直保持

代码

报错详情


{
    "message": "getResult error:签名错误",
    "code": 20000,
    "status_code": 500,
    "debug": {
        "line": 219,
        "file": "/home/vagrant/Code/Laravel/ShareLoverServer/vendor/yansongda/pay/src/Gateways/Wechat/Wechat.php",
        "class": "Yansongda\\Pay\\Exceptions\\GatewayException",
        "trace": [
            "#0 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/yansongda/pay/src/Gateways/Wechat/Wechat.php(179): Yansongda\\Pay\\Gateways\\Wechat\\Wechat->getResult('pay/unifiedorde...')",
            "#1 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/yansongda/pay/src/Gateways/Wechat/MiniappGateway.php(42): Yansongda\\Pay\\Gateways\\Wechat\\Wechat->preOrder(Array)",
            "#2 /home/vagrant/Code/Laravel/ShareLoverServer/app/Api/Controllers/Order/OrderController.php(210): Yansongda\\Pay\\Gateways\\Wechat\\MiniappGateway->pay(Array)",
            "#3 [internal function]: App\\Api\\Controllers\\Order\\OrderController->create(Object(Dingo\\Api\\Http\\Request))",
            "#4 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)",
            "#5 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('create', Array)",
            "#6 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Api\\Controllers\\Order\\OrderController), 'create')",
            "#7 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Route.php(162): Illuminate\\Routing\\Route->runController()",
            "#8 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Router.php(610): Illuminate\\Routing\\Route->run()",
            "#9 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#10 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/tymon/jwt-auth/src/Middleware/GetUserFromToken.php(46): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#11 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Tymon\\JWTAuth\\Middleware\\GetUserFromToken->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#12 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#13 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/dingo/api/src/Http/Middleware/PrepareController.php(45): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#14 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Dingo\\Api\\Http\\Middleware\\PrepareController->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#15 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#16 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#17 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Router.php(612): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))",
            "#18 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Router.php(571): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Dingo\\Api\\Http\\Request))",
            "#19 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Router.php(549): Illuminate\\Routing\\Router->dispatchToRoute(Object(Dingo\\Api\\Http\\Request))",
            "#20 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/dingo/api/src/Routing/Adapter/Laravel.php(81): Illuminate\\Routing\\Router->dispatch(Object(Dingo\\Api\\Http\\Request))",
            "#21 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/dingo/api/src/Routing/Router.php(513): Dingo\\Api\\Routing\\Adapter\\Laravel->dispatch(Object(Dingo\\Api\\Http\\Request), 'v1')",
            "#22 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/dingo/api/src/Http/Middleware/Request.php(126): Dingo\\Api\\Routing\\Router->dispatch(Object(Dingo\\Api\\Http\\Request))",
            "#23 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(114): Dingo\\Api\\Http\\Middleware\\Request->Dingo\\Api\\Http\\Middleware\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#24 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/fideloper/proxy/src/TrustProxies.php(56): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#25 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Fideloper\\Proxy\\TrustProxies->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#26 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#27 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#28 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#29 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#30 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#31 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#32 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#33 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#34 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))",
            "#35 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/dingo/api/src/Http/Middleware/Request.php(127): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))",
            "#36 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/dingo/api/src/Http/Middleware/Request.php(103): Dingo\\Api\\Http\\Middleware\\Request->sendRequestThroughRouter(Object(Dingo\\Api\\Http\\Request))",
            "#37 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Dingo\\Api\\Http\\Middleware\\Request->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))",
            "#38 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))",
            "#39 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))",
            "#40 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))",
            "#41 /home/vagrant/Code/Laravel/ShareLoverServer/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))",
            "#42 /home/vagrant/Code/Laravel/ShareLoverServer/public/index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))",
            "#43 {main}"
        ]
    }
}

感谢yansongda大大

这绝对是世界上最好的微信呸 / 阿里呸 Composer包了.
虽然使用过程中还是遇到不少问题, 但都是微信的锅.

支付宝异步回调验证失败

我使用的是支付宝沙箱环境,可能与此有关。

根据异步回调接口捕捉到的通知消息,支付宝返回的trade_statusTRADE_SUCCESS,是已经支付成功的,但使用
Pay::driver('alipay')->gateway()->verify($request->all())
签名验证是不通过的。

微信支付沙箱模式问题

包版本号

2.0.6

问题描述

微信沙箱模式接口调用失败

代码

涉及到 异步通知、同步通知 的问题,请将 nginx/Apache 的相关日志贴出来

报错详情

Yansongda\Pay\Exceptions\GatewayException: Get Wechat API Error:验证签名失败, 请调用getsignkey生成沙箱密钥 in file E:\Server\www\project\vendor\yansongda\pay\src\Gateways\Wechat\Support.php on line 72
Stack trace:

关于小程序退款报appid参数长度不够的bug

问题描述

使用这个包时,对小程序的小程序的订单退款时会报appid参数长度不够,不管设置成appid 还是 miniapp_id

代码

protected function getResult($end_point, $cert = false)
{
$this->config['sign'] = $this->getSign($this->config);

    if ($cert) {
        $data = $this->fromXml($this->post(
            $end_point,
            $this->toXml($this->config),
            [
                'cert'    => $this->user_config->get('cert_client', ''),
                'ssl_key' => $this->user_config->get('cert_key', ''),
            ]
        ));
    } else {
        $data = $this->fromXml($this->post($end_point, $this->toXml($this->config)));
    }

    if (!isset($data['return_code']) || $data['return_code'] !== 'SUCCESS' || $data['result_code'] !== 'SUCCESS') {
        $error = 'getResult error:'.$data['return_msg'];
        $error .= isset($data['err_code_des']) ? ' - '.$data['err_code_des'] : '';
    }

    if (!isset($error) && $this->getSign($data) !== $data['sign']) {
        $error = 'getResult error: return data sign error';
    }

    if (isset($error)) {
        throw new GatewayException(
            $error,
            20000,
            $data);
    }

    return $data;
}

报错详情

getResult error:appid参数长度有误

参考解决办法

wechat.php 文件的够着函数接收 小程序的appid

$this->config = [
'appid' =>empty($this->user_config->get('app_id', ''))?$this->user_config->get('miniapp_id', ''):$this->user_config->get('app_id', ''),
'mch_id' => $this->user_config->get('mch_id', ''),
'nonce_str' => $this->createNonceStr(),
'sign_type' => 'MD5',
'notify_url' => $this->user_config->get('notify_url', ''),
'trade_type' => $this->getTradeType(),
];

关于验证微信通信标识的疑问

微信支付结果通知 API 文档中说只有当 return_code (通信标识) 为 SUCCESS 时,返回信息中才有 sign 等字段,所以当 return_code (通信标识) 为 FAIL 时,下面这段代码会因为找不到 $data['sign'] 报错吧?

public function verify($data, $sign = null, $sync = false)
{
    $data = $this->fromXml($data);
    $sign = is_null($sign) ? $data['sign'] : $sign;
    return $this->getSign($data) === $sign ? $data : false;
}

微信文档链接
代码链接

几个小建议

  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. 代码最好【便于】使用者扩展其他支付(苹果内支付、银联支付等等)。

微信支付成功后返回页面问题

包版本号

2

问题描述

用1.x版本的时候,是在微信返回值外包了层script,能返回到支付的地址上
return '<script>window.location.href = "'.$pay->driver('wechat')->gateway('wap')->pay($config_biz).'";</script>';
用2.x的时候,微信方法会直接返回跳转刷新的代码了,但是返回的不是支付打开的那个地址是再之前的那个页面会被刷新,因为我做的是那个页面是商品详情页,下单成功后ajax返回了下单信息,然后在详情页上点的支付链接
这样就造成了支付完之后原来那个商品的详情页被刷新了,不能跳到成功支付的提示页面上去。
有人遇到这种情况,怎么解决的么?
`HTTP/1.0 302 Found
Cache-Control: no-cache, private
Date: Wed, 10 Jan 2018 07:52:38 GMT
Location: https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20180110155238cacaca91720685509580&package=3552120091

    <title>Redirecting to https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20180110155238cacaca91720685509580&amp;package=3552120091</title>
</head>
<body>
    Redirecting to <a href="https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20180110155238cacaca91720685509580&amp;package=3552120091">https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20180110155238cacaca91720685509580&amp;package=3552120091</a>.
</body>
` ## 代码 涉及到 异步通知、同步通知 的问题,请将 nginx/Apache 的相关日志贴出来

报错详情

支付宝异步回调结果包含中文乱码导致验签失败

包版本号

yansongda/laravel-pay": "^1.0"

问题描述

支付宝异步回调验签失败,已检查公钥设置,打印 回调验签信息,发现中文变成了乱码,是不是这个原因引起验签失败??

代码

if (Pay::driver('alipay')->gateway()->verify($request->all())) {
            if ($request->has('trade_status')) {
                switch ($request->trade_status) {
                    case 'TRADE_SUCCESS':
                    case 'TRADE_FINISHED':
                        $orders = Orders::query()->where('number', $request->out_trade_no)->first();
                        if ($orders) {
                            $user = User::query()->findOrFail($orders->user_id);
                            if ($orders->payment_total == $request->total_amount) {
                                if ($orders->payment_state == 0) {
                                    $user->increment('integral', $orders->payment_total);
                                    event(new integral($user, '消费, ' . '订单号' . $orders->number, '+ ' . $orders->payment_total));
                                    $orders->payment_state = 1;
                                    $orders->payment_method = 1;
                                    $orders->state = 1;
                                    event(new LessStock($orders));
                                    $orders->save();
                                }
                            }
                        }
                        break;
                }
                return 'success';
            }
        } else {
            return 'fail';
        }

报错详情

支付宝回调部分信息

"subject":"Art Life �~X��~I��~N� �~T��~^~K","sign":"m/jE++9t

微信退款通知检验代码

yansongda\pay\src\Gateways\Wechat\Wechat.php
/**
* 验证退款数据
/
public function verifyRefund($data)
{
$data = $this->fromXml($data);
$key = md5($this->user_config->get('key'));
$decrypt_data = $this->refund_decrypt($data['req_info'],$key);
return $this->fromXml($decrypt_data);
}
/
*
* 解密数据
*/
public function refund_decrypt($str, $key) {
$str = base64_decode($str);
$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);
$block = mcrypt_get_block_size('rijndael_128', 'ecb');
$pad = ord($str[($len = strlen($str)) - 1]);
$len = strlen($str);
$pad = ord($str[$len - 1]);
return substr($str, 0, strlen($str) - $pad);
}

$pay = new Pay($this->config);
$verify = $pay->driver('wechat')->gateway('mp')->verifyRefund($data);

编码的问题

包版本号

"yansongda/laravel-pay": "dev-master"

问题描述

支付宝异步通知编码错误

代码

涉及到 异步通知、同步通知 的问题,请将 nginx/Apache 的相关日志贴出来

报错详情

Alipay::verify里data从gb2312转为utf-8,
Support::verifySign里
$toVerify = $sync ? mb_convert_encoding(json_encode($data, JSON_UNESCAPED_UNICODE), 'gb2312', 'utf-8') : self::getSignContent(Arr::encoding($data, 'gb2312', 'utf-8'), true);
subject是中文的话,导致签名错误
我把两次编码转换注释后签名正常

支付宝支付成功,返回回调地址时出现:The Response content must be a string or object implementing __toString(), "boolean" given.

问题描述

支付宝支付成功,返回回调地址时出现:The Response content must be a string or object implementing __toString(), "boolean" given.

代码

路由:
// 支付宝回调地址
Route::get('alipay/return','AliPayController@return');
// 支付宝异步通知
Route::post('alipay/notify','AliPayController@notify');
// 支付地址
Route::get('alipay','AliPayController@pay');

控制器:
`
namespace App\Http\Controllers;

use Pay;
use Illuminate\Http\Request;

class AliPayController extends Controller
{
public function pay ()
{
$config_biz = [
'out_trade_no' => time(),
'total_amount' => '0.01',
'subject' => 'test',
];

    return Pay::driver('alipay')->gateway()->pay($config_biz);
}

public function return(Request $request)
{
    return Pay::driver('alipay')->gateway()->verify($request->all());
}

public function notify(Request $request)
{
    if (Pay::driver('alipay')->gateway()->verify($request->all())) {
        file_put_contents(storage_path('notify.txt'), "收到来自支付宝的异步通知\r\n", FILE_APPEND);
        file_put_contents(storage_path('notify.txt'), '订单号:' . $request->out_trade_no . "\r\n", FILE_APPEND);
        file_put_contents(storage_path('notify.txt'), '订单金额:' . $request->total_amount . "\r\n\r\n", FILE_APPEND);
    } else {
        file_put_contents(storage_path('notify.txt'), "收到异步通知\r\n", FILE_APPEND);
    }

    echo "success";
}

}
`

报错详情

错误信息:
`*
* @param mixed $content Content that can be cast to string
*
* @return $this
*
* @throws \UnexpectedValueException
*/
public function setContent($content)
{
if (null !== $content && !is_string($content) && !is_numeric($content) && !is_callable(array($content, '__toString'))) {
throw new \UnexpectedValueException(sprintf('The Response content must be a string or object implementing __toString(), "%s" given.', gettype($content)));
}

    $this->content = (string) $content;

    return $this;
}

/**
 * Gets the current response content.
 *
 * @return string Content
 */
public function getContent()
{
    return $this->content;
}

/**
 * Sets the HTTP protocol version (1.0 or 1.1).
 *

Arguments
"The Response content must be a string or object implementing __toString(), "boolean" given."`

微信支付 notify 方法报错

问题描述

复制你代码是调用 notify方法 报错
微信支付

代码

报错详情

convert to array error !invalid xml

微信H5支付成功后如何获取返回的数据?

问题描述

使用微信H5支付成功后,在 notify 函数里面写成功后的业务逻辑不起作用,也没报错,感觉就是整个流程没走 notify_url 这一步。设置了 return_url 后到是有返回这里,但看文档里说这个地方仅仅只是做跳转用,请问支付成功后在哪做数据处理呢?

代码

报错详情

微信支付 服务商的支持

问题描述

非问题,是建议

代码

报错详情

说明

当前好像没有对微信服务商的支持,服务商文档,服务商大部分接口都一致,只是对应的多了一层 sub_appid 和 sub_mch_id

關於微信香港錢包的問題

问题描述

我是一家做 multi-payment gateway 公司的產品負責人,現在我的項目要支持微信香港錢包,但全部的 endpoint 都跟國內錢包的不一樣。我也想 contribute 到這裡來,但我看到 namespace 已經用了 Wechat 做國內錢包。

所以我想問的是,對於這個狀況會有什麼建議嗎?

异步回调问题

问题描述

支付宝异步认证的时候问题

代码

public function verify($data, $sign = null, $sync = false)
{
if (is_null($this->user_config->get('ali_public_key'))) {
throw new InvalidArgumentException('Missing Config -- [ali_public_key]');
}

    $sign = is_null($sign) ? $data['sign'] : $sign;

    $res = "-----BEGIN PUBLIC KEY-----\n".
            wordwrap($this->user_config->get('ali_public_key'), 64, "\n", true).
            "\n-----END PUBLIC KEY-----";

    $toVerify = $sync ? json_encode($data) : $this->getSignContent($data, true);

    return openssl_verify($toVerify, base64_decode($sign), $res, OPENSSL_ALGO_SHA256) === 1 ? $data : false;
}

报错详情

与配置项不一样

支付宝回调问题

问题描述

使用你列子中的回调方法,支付宝回调用回调地址后数据是以POST方式返回回来的,请问你的notify 函数规定了类型,导致我一直接收不到支付宝回调信息,我改为了$_POST去接收,但是这样就需要修改你封装好的文件里面的东西,所以想问一下,是我这边有什么代码没有配置上还是怎么回事

代码

load->model('paymentrequest/Payment_request_model'); } public function notify(Request $request) { file_put_contents('notify.txt', $request, FILE_APPEND); $pay = new Pay($this->alipay_config); if ($pay->driver('alipay')->gateway('app')->verify($request->all())) { file_put_contents('notify.txt', $request, FILE_APPEND); } } } ## 报错详情

Severity: 4096

Message: Argument 1 passed to Alipay_notify_controller::notify() must be an instance of Illuminate\Http\Request, none given

Filename: controllers/Alipay_notify_controller.php

Line Number: 16

微信APP支付签名问题

问题描述

调用微信APP下单API后会获取到prepayid这个参数,我看了微信文档说这个参数要额外进行一次签名,看了下你的code好像没有对这个参数进行额外的签名。

代码

报错详情

支付宝回调,subject中文乱码,验签失败

包版本号

    "yansongda/laravel-pay": "^2.0"

问题描述

支付宝回调,商品名称包含中文,subject乱码导致验签失败,测试subject纯英文验签成功,已检查密无误,只有当subject有中文时才会验签失败,纯英文直接通过验签

代码

调用代码

  $config_order = [
                    'out_trade_no' => $orders->number,
                    'total_amount' => $orders->payment_total,
                    'subject' => 'test-测试',
                ];

                $alipay = Pay::alipay();

                return $alipay->app($config_order);

接受回调信息代码


 public function notify()
    {
        $alipay = Pay::alipay();

        try {
            $data = $alipay->verify();
            \Log::notice('Alipay return information: ', [
                'data' => $data->all()
            ]);

        } catch (\Exception $exception) {
            \Log::notice('Alipay send error: ', [
                'errors:' => $exception->getMessage(),
            ]);
        }
    }

纯英文log 详情

f736d134-b825-4f24-a2ae-f522c1695972

验签成功!

laravel log

bf4a84eb-7f50-4e2b-80bb-3a29570a4607

验签成功!

报错详情

当subject包含中文时,subject 乱码 验签失败

中文log详情

c0e004f8-9432-442a-9e5a-50080577e381

验签失败!

WapGateway不想返回表单,需要url怎么支持?

包版本号

2.0

代码

    public function pay($endpoint, array $payload): Response
    {
        $payload['method'] = $this->getMethod();
        $payload['biz_content'] = json_encode(array_merge(
            json_decode($payload['biz_content'], true),
            ['product_code' => $this->getProductCode()]
        ));
        $payload['sign'] = Support::generateSign($payload, $this->config->get('private_key'));

        Log::debug('Paying A Web/Wap Order:', [$endpoint, $payload]);

        // 这里我想返回url,而不是form表单
       return  $endpoint . '?' . http_build_query($payload);


        return $this->buildPayHtml($endpoint, $payload);
    }

Log 类定位错误

包版本号

2.X

问题描述

Class 'Yansongda\Pay\Gateways\Wechat\Log' not found

代码

涉及到 异步通知、同步通知 的问题,请将 nginx/Apache 的相关日志贴出来
src/Gateways/Wechat/AppGateway.php 36line

报错详情

test

问题描述

test

代码

test

报错详情

test

建议增加退款相关文档

问题描述

目前文档中已说明所有网关均支持 refund 方法,支付宝退款 $config_biz 传入订单号即可,但微信支付退款传入的配置项并未说明,建议完善一下退款的文档哦,谢谢。

readme的使用说明driver方法写错了

使用说明的第0部分

$pay = new Pay($config); return $pay->dirver('alipay')->gateway('web')->pay($config_biz);

应该改成

$pay = new Pay($config); return $pay->driver('alipay')->gateway('web')->pay($config_biz);

支付宝回调数据验证失败

问题描述

用示例做的
$pay->driver('alipay')->gateway()->verify($request->all())
一直返回false
测试数据是支付宝同步return_url中GET的数据

异步通知这步也是验证失败

顺便问下异步通知中gateway类型有关么?比如用wap支付的,这里是否能验证通过?

还有微信的也是如此,支付的时候可能会用h5的wap和mp等,异步通知里能否wap一个网关来做回调数据的验证?我目前只做了wap支付,异步通知数据验证通过了

代码

报错详情

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.