public function testGetPrepareId() { $unifiedOrder = new UnifiedOrder(); $unifiedOrder->init($this->config); $unifiedOrder->setParameter('out_trade_no', time()); $unifiedOrder->setParameter('total_fee', 1); $unifiedOrder->setParameter('body', 'pay 1 fen'); $unifiedOrder->setParameter('trade_type', 'JSAPI'); $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; $unifiedOrder->setParameter('openid', $this->config['open_id']); $unifiedOrder->setParameter('notify_url', 'http://m.qiaocat.com'); $res = $unifiedOrder->getResult(); $this->assertEquals('SUCCESS', $res['return_code']); }
/** * * 统一下单,UnifiedOrder中out_trade_no、body、total_fee、trade_type必填 * appid、mchid、spbill_create_ip、nonce_str不需要填入 * @param UnifiedOrder $inputObj * @param int $timeOut * @throws Exception * @return 成功时返回,其他抛异常 */ public static function unifiedOrder($inputObj, $timeOut = 6) { $url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //检测必填参数 if (!$inputObj->IsOut_trade_noSet()) { throw new Exception("缺少统一支付接口必填参数out_trade_no!"); } else { if (!$inputObj->IsBodySet()) { throw new Exception("缺少统一支付接口必填参数body!"); } else { if (!$inputObj->IsTotal_feeSet()) { throw new Exception("缺少统一支付接口必填参数total_fee!"); } else { if (!$inputObj->IsTrade_typeSet()) { throw new Exception("缺少统一支付接口必填参数trade_type!"); } } } } //关联参数 if ($inputObj->GetTrade_type() == "JSAPI" && !$inputObj->IsOpenidSet()) { throw new Exception("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"); } if ($inputObj->GetTrade_type() == "NATIVE" && !$inputObj->IsProduct_idSet()) { throw new Exception("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!"); } //异步通知url未设置,则使用配置文件中的url if (!$inputObj->IsNotify_urlSet()) { $inputObj->SetNotify_url(Config::NOTIFY_URL); //异步通知url } $inputObj->SetAppid(Config::APPID); //公众账号ID $inputObj->SetMch_id(Config::MCHID); //商户号 $inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']); //终端ip //$inputObj->SetSpbill_create_ip("1.1.1.1"); $inputObj->SetNonce_str(self::getNonceStr()); //随机字符串 //签名 $inputObj->SetSign(); $xml = $inputObj->ToXml(); $startTimeStamp = self::getMillisecond(); //请求开始时间 $response = self::postXmlCurl($xml, $url, false, $timeOut); $result = Results::Init($response); self::reportCostTime($url, $startTimeStamp, $result); //上报请求花费时间 return $result; }
<?php /** * Native(原生)支付-模式二-demo * ==================================================== * 商户生成订单,先调用统一支付接口获取到code_url, * 此URL直接生成二维码,用户扫码后调起支付。 * */ include_once "./WxPayHelper/WxPayHelper.php"; //使用统一支付接口 $unifiedOrder = new UnifiedOrder(); //设置统一支付接口参数 //设置必填参数 //appid已填,商户无需重复填写 //mch_id已填,商户无需重复填写 //noncestr已填,商户无需重复填写 //spbill_create_ip已填,商户无需重复填写 //sign已填,商户无需重复填写 $unifiedOrder->setParameter("body", "贡献一分钱"); //商品描述 //自定义订单号,此处仅作举例 $timeStamp = time(); $out_trade_no = WxPayConf::APPID . "{$timeStamp}"; $unifiedOrder->setParameter("out_trade_no", "{$out_trade_no}"); //商户订单号 $unifiedOrder->setParameter("total_fee", "1"); //总金额 $unifiedOrder->setParameter("notify_url", WxPayConf::NOTIFY_URL); //通知地址 $unifiedOrder->setParameter("trade_type", "NATIVE"); //交易类型
$jsApi = new JsApi(); //=========步骤1:网页授权获取用户openid============ //通过code获得openid if (!isset($_GET['code'])) { //触发微信返回code码 $url = $jsApi->createOauthUrlForCode(WxPayConf::JS_API_CALL_URL); Header("Location: {$url}"); } else { //获取code码,以获取openid $code = $_GET['code']; $jsApi->setCode($code); $openid = $jsApi->getOpenId(); } //=========步骤2:使用统一支付接口,获取prepay_id============ //使用统一支付接口 $unifiedOrder = new UnifiedOrder(); //设置统一支付接口参数 //设置必填参数 //appid已填,商户无需重复填写 //mch_id已填,商户无需重复填写 //noncestr已填,商户无需重复填写 //spbill_create_ip已填,商户无需重复填写 //sign已填,商户无需重复填写 $unifiedOrder->setParameter("openid", "{$openid}"); //商品描述 $unifiedOrder->setParameter("body", "贡献一分钱"); //商品描述 //自定义订单号,此处仅作举例 $timeStamp = time(); $out_trade_no = $jsApi->wxPayConfig->APPID . "{$timeStamp}"; $unifiedOrder->setParameter("out_trade_no", "{$out_trade_no}");
if (!isset($_GET['code'])) { //触发微信返回code码 $url = $jsApi->createOauthUrlForCode(WxPayConf::JS_API_CALL_URL . "?confirm=" . $_POST['orderid'] . "_" . $_POST['amount']); //error_log("url: ".$url); header("Location: {$url}"); } else { //获取code码,以获取openid $code = $_GET['code']; $confirm = explode("_", $_GET['confirm']); //error_log("confirm: ".$confirm[1]); $jsApi->setCode($code); $openid = $jsApi->getOpenId(); } //=========步骤2:使用统一支付接口,获取prepay_id============ //使用统一支付接口 $unifiedOrder = new UnifiedOrder(); //设置统一支付接口参数 //设置必填参数 //appid已填,商户无需重复填写 //mch_id已填,商户无需重复填写 //noncestr已填,商户无需重复填写 //spbill_create_ip已填,商户无需重复填写 //sign已填,商户无需重复填写 $unifiedOrder->setParameter("openid", $openid); //openid $unifiedOrder->setParameter("body", "充值杀价币"); //商品描述 $unifiedOrder->setParameter("out_trade_no", $confirm[0]); //商户订单号 $unifiedOrder->setParameter("total_fee", $confirm[1] * 100); //总金额