上一篇我们讲了在微信浏览器内实现微信支付的功能,它特别适合于一些基于微信公众号的h5站点等,支付流程也相当流畅,但是...
还有一种情况,比如现在北哥兄弟连PC版,是生成了一个二维码,这个二维码是专属的,扫描后直接就蹦出了支付页面。现在告诉你它如何实现的~
本文相关框架
Yii2
EasyWechat
忆往昔
上节课我们讲了一个很重要的概念,那就是预支付交易回话标识“我们先调用接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。”
换句话说,获取预支付交易回话标识这步基本都是一致的,不同就在于场景不同,大家一定要举一反三。
那么你还记得上篇我们获取预支付交易回话标识的代码实现么?
忘记了?那你先穿越下:开启穿越门
核心就是这段代码
Now
我先来模拟一个场景,假设我们现在有一个action(index.php?r=charge/qrcode)负责生成上篇文章充值花费的微信二维码,希望结果是微信扫码后,不进入任何页面,直接蹦出输入支付密码的地方,然后就支付了。
// ChargeController use EasyWeChat\Foundation\Application; use EasyWeChat\Payment\Order; ... /** * 生成支付二维码 **/ public function actionQrcode(){ $charge = new Charge(); // 刷刷刷一堆代码,就生成了未付款订单。 // 通过EasyWechat来调用 $config = Yii::$app->params['WECHAT']; $wxApp = new Application($config); $payment = $wxApp->payment; $notifyUrl = Yii::$app->request->getHostInfo() . Url::to(['/wechat/charge/notify-qrcode']); $attributes = [ 'trade_type'=>Order::NATIVE,//不同点 'body'=>"商品描述", 'detail'=>"商品简介", 'out_trade_no'=>$charge->number, 'total_fee'=>$charge->money*100, 'notify_url'=>$notifyUrl ]; $o = new Order($attributes); $result = $payment->prepare($o); if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS'){ $prepayId = $result->prepay_id; $codeUrl = $result->code_url; } } ...