-
Notifications
You must be signed in to change notification settings - Fork 323
payment_forever
thenbsp edited this page Mar 5, 2016
·
10 revisions
该模式需要设置 公众号后台 -> 微信支付 -> 开发配置 -> 描码支付 -> 支付回调 URL
描码支付的永久模式,是应用于一些 一旦生成之后不可改变 的线下场景中,比如公交站牌上的二维码,因此在生成这种二维码时,只需要在二维码中保存订单(或产品)的唯一标识即可,当用户扫码时,利用唯一标识再去 支付回调 URL 调用订单(或产品)信息。
use Thenbsp\Wechat\Payment\Qrcode\Forever;
// 定义产品(或订单)唯一标识
$productId = date('YmdHis').mt_rand(10000, 99999);
// 获取支付链接
$qrcode = new Forever('appid', 'mch_id', 'key');
// 为 $productId 生成二维码
$payurl = $qrcode->getPayurl($productId);
HTML
示例中使用的在线二维码生成工具,实际应用中可使用第三方包生成二维码。
<img src="http://qr.liantu.com/api.php?&bg=ffffff&fg=000000&text=<?php echo $payurl; ?>" />
现在,当用户扫码时,Request 对象中将包含 订单的唯一标识,即 product_id。
use Thenbsp\Wechat\Payment\Unifiedorder;
use Thenbsp\Wechat\Payment\Qrcode\ForeverCallback;
$callback = new ForeverCallback();
if( !$callback->containsKey('product_id') ) {
$callback->fail('Invalid Request');
}
// $callback['product_id'] 就是生成二维码时的订单ID
// 现在只需要根据这个 ID 把订单信息查出来,去下单
// 去下单
$unifiedorder = new Unifiedorder('appid', 'mch_id', 'key');
$unifiedorder->set('body', '微信支付测试商品');
$unifiedorder->set('total_fee', 1);
$unifiedorder->set('openid', 'OPENID');
$unifiedorder->set('out_trade_no', date('YmdHis').mt_rand(10000, 99999));
$unifiedorder->set('notify_url', 'http://example.com/your-notify.php');
// 返回这个订单
$callback->success($unifiedorder);
use Symfony\Component\HttpFoundation\Request;
use Thenbsp\Wechat\Payment\Qrcode\ForeverCallback;
// 创建 Request 对象
$request = Request::createFromGlobals();
// 输出到日志
$logger->debug($request->getContent());
// 指定 Request
$callback = new ForeverCallback($request);
if( !$callback->containsKey('product_id') ) {
$callback->fail('Invalid Request');
}
// ...