public function createQrcode() { $pkey = base64_decode(I("pkey")); $pkeys = explode("@", $pkey); if (count($pkeys) != 2) { $this->assign('out_trade_no', ""); } else { $morders = D('Home/Orders'); $obj["orderIds"] = $pkeys[1]; $data = $morders->getPayOrders($obj); $orders = $data["orders"]; $needPay = $data["needPay"]; $this->assign("orderIds", $orderIds); $this->assign("orders", $orders); $this->assign("needPay", $needPay); $this->assign("orderCnt", count($orders)); // 使用统一支付接口 $unifiedOrder = new \UnifiedOrder_pub(); $unifiedOrder->setParameter("body", "支付订单費用"); // 商品描述 // 自定义订单号,此处仅作举例 $timeStamp = time(); $out_trade_no = "{$timeStamp}"; // $out_trade_no = "1000001|1000002"; $unifiedOrder->setParameter("out_trade_no", "{$out_trade_no}"); // 商户订单号 $unifiedOrder->setParameter("total_fee", $needPay * 100); // 总金额 $unifiedOrder->setParameter("notify_url", C('WxPayConf_pub.NOTIFY_URL')); // 通知地址 $unifiedOrder->setParameter("trade_type", "NATIVE"); // 交易类型 $unifiedOrder->setParameter("attach", "{$pkey}"); // 附加数据 // $unifiedOrder->setParameter ( "detail", "Ipad mini" );//附加数据 $unifiedOrder->SetParameter("input_charset", "UTF-8"); // 获取统一支付接口结果 $unifiedOrderResult = $unifiedOrder->getResult(); // 商户根据实际情况设置相应的处理流程 if ($unifiedOrderResult["return_code"] == "FAIL") { // 商户自行增加处理流程 echo "通信出错:" . $unifiedOrderResult['return_msg'] . "<br>"; } elseif ($unifiedOrderResult["result_code"] == "FAIL") { // 商户自行增加处理流程 echo "错误代码:" . $unifiedOrderResult['err_code'] . "<br>"; echo "错误代码描述:" . $unifiedOrderResult['err_code_des'] . "<br>"; } elseif ($unifiedOrderResult["code_url"] != NULL) { // 从统一支付接口获取到code_url $code_url = $unifiedOrderResult["code_url"]; // 商户自行增加处理流程 } $this->assign('out_trade_no', $obj["orderIds"]); $this->assign('code_url', $code_url); $this->assign('unifiedOrderResult', $unifiedOrderResult); } $this->display("default/payment/wxnative2/qrcode"); }
public function index() { $this->isUserLogin(); vendor('Weixinpay.WxPayPubHelper'); //使用jsapi接口 $jsApi = new \JsApi_pub(); //=========步骤1:网页授权获取用户openid============ //通过code获得openid $code = $_GET['code']; $jsApi->setCode($code); $openid = session('WST_USER')['wxId']; $pkey = session('WST_USER')["userId"] . "@" . $_SESSION["orderIds"]; $time = time(); $res = array('order_sn' => $time, 'order_amount' => $_SESSION['needPay']); //=========步骤2:使用统一支付接口,获取prepay_id============ //使用统一支付接口 $unifiedOrder = new \UnifiedOrder_pub(); $total_fee = $res['order_amount'] * 100; //$total_fee = 1; $body = "订单支付{$res['order_sn']}"; $unifiedOrder->setParameter("openid", "{$openid}"); //用户标识 $unifiedOrder->setParameter("body", $body); //商品描述 //自定义订单号,此处仅作举例 $out_trade_no = $res['order_sn']; $unifiedOrder->setParameter("out_trade_no", "{$out_trade_no}"); //商户订单号 $unifiedOrder->setParameter("total_fee", $total_fee); //总金额 $unifiedOrder->setParameter("attach", "{$pkey}"); //附加数据 $unifiedOrder->setParameter("notify_url", C('WxPayConf_pub.NOTIFY_URL')); //通知地址 $unifiedOrder->setParameter("trade_type", "JSAPI"); //交易类型 $unifiedOrder->SetParameter("input_charset", "UTF-8"); //非必填参数,商户可根据实际情况选填 $prepay_id = $unifiedOrder->getPrepayId(); //=========步骤3:使用jsapi调起支付============ $jsApi->setPrepayId($prepay_id); $jsApiParameters = $jsApi->getParameters(); $wxconf = json_decode($jsApiParameters, true); if ($wxconf['package'] == 'prepay_id=') { $this->error('当前订单存在异常,不能使用支付'); } $this->assign('res', $res); $this->assign('jsApiParameters', $jsApiParameters); $this->display('default/payment/wxjsapi/wxpay'); }