$business->appsecret(APPSECRET); $business->mch_id(MCHID); $business->mch_key(MCHKEY); $order = new Order(); $order->body('iphone 6 plus'); $order->out_trade_no(date('Y-m-dHis') . mt_rand(10000, 99999)); $order->total_fee('1'); $order->openid($request['openid']); $order->notify_url('Your notify url'); $unifiedorder = new Unifiedorder($business, $order); $response = $unifiedorder->getResponse(); /** * 响应订单 */ $params = array('return_code' => 'SUCCESS', 'result_code' => 'SUCCESS', 'return_msg' => 'return message', 'appid' => $request['appid'], 'err_code_des' => 'err code description', 'mch_id' => $request['mch_id'], 'nonce_str' => $request['nonce_str'], 'prepay_id' => $response['prepay_id']); $signGenerator = new SignGenerator($params); $signGenerator->onSortAfter(function ($that) { $that->addParams('key', MCHKEY); }); $params['sign'] = $signGenerator->getResult(); $xml = Util::array2XML($params); echo $xml; // { // "appid":"wx345f3830c28971f4", // "openid":"oWY-5jjLjo7pYUK86JPpwvcnF2Js", // "mch_id":"1241642202", // "is_subscribe":"Y", // "nonce_str":"fhKb6Fkzm3UJrX95", // "product_id":"2015080618052364076", // "sign":"1ED0F1A052F5212009E7C5DB89C57789" // }
/** * 获取统一下单结果 */ public function getResponse() { $signGenerator = new SignGenerator($this->bag); $signGenerator->onSortAfter(function ($bag) { $bag->set('key', $this->key); }); // 生成签名 $sign = $signGenerator->getResult(); // 生成签名后移除 Key $this->bag->remove('key'); // 调置签名 $this->bag->set('sign', $sign); $body = Util::array2XML($this->bag->all()); $response = Request::post(static::UNIFIEDORDER_URL, $body, false); $response = Util::XML2Array($response); if (isset($response['result_code']) && $response['result_code'] === 'FAIL') { throw new PaymentException($response['err_code'] . ': ' . $response['err_code_des']); } if (isset($response['return_code']) && $response['return_code'] === 'FAIL') { throw new PaymentException($response['return_code'] . ': ' . $response['return_msg']); } return $response; }
$requestBag->set('trade_type', 'NATIVE'); // NATIVE 时不需要 Openid /** * 统一下单 */ $unifiedorder = new Unifiedorder($requestBag, MCHKEY); try { $response = $unifiedorder->getResponse(); } catch (PaymentException $e) { exit($e->getMessage()); } /** * 响应订单参数包 */ $responseBag = new Bag(); $responseBag->set('appid', $request['appid']); $responseBag->set('mch_id', $request['mch_id']); $responseBag->set('nonce_str', $request['nonce_str']); $responseBag->set('prepay_id', $response['prepay_id']); $responseBag->set('return_code', 'SUCCESS'); $responseBag->set('result_code', 'SUCCESS'); $responseBag->set('return_msg', 'return message'); $responseBag->set('err_code_des', 'err code description'); $signGenerator = new SignGenerator($responseBag); $signGenerator->onSortAfter(function ($bag) use($unifiedorder) { $bag->set('key', $unifiedorder->getKey()); }); $responseBag->set('sign', $signGenerator->getResult()); $responseBag->remove('key'); $xml = Util::array2XML($responseBag->all()); echo $xml;
/** * 发送响应 */ public function send() { $response = $this->bag->all(); $response = Util::array2XML($response); echo $response; }
/** * 获取统一下单结果 */ public function getResponse() { $params = $this->order->getParams(); $params['appid'] = $this->business->getParams('appid'); $params['mch_id'] = $this->business->getParams('mch_id'); ksort($params); $sign = http_build_query($params); $sign = urldecode($sign) . '&key=' . $this->business->getParams('mch_key'); $sign = strtoupper(md5($sign)); $params['sign'] = $sign; $request = Util::array2XML($params); $response = $this->curl->post(static::UNIFIEDORDER_URL, $request); if (empty($response)) { throw new PaymentException(sprintf('Get Unifiedorder Failure: %s', $this->curl->error())); } $object = Util::XML2Array($response); if (isset($object['result_code']) && $object['result_code'] === 'FAIL') { throw new PaymentException($object['err_code'] . ': ' . $object['err_code_des']); } if (isset($object['return_code']) && $object['return_code'] === 'FAIL') { throw new PaymentException($object['return_code'] . ': ' . $object['return_msg']); } return $object; }