Beispiel #1
0
 /**
  * 
  * 生成直接支付url,支付url有效期为2小时,模式二
  * @param UnifiedOrderInput $input
  */
 public function GetPayUrl($input)
 {
     if ($input->GetTrade_type() == "NATIVE") {
         $result = WxPayApi::unifiedOrder($input);
         return $result;
     }
 }
Beispiel #2
0
 /**
  * 
  * 获取jsapi支付的参数
  * @param array $UnifiedOrderResult 统一支付接口返回的数据
  * @throws WxPayException
  * 
  * @return json数据,可直接填入js函数作为参数
  */
 public function GetJsApiParameters($UnifiedOrderResult)
 {
     if (!array_key_exists("appid", $UnifiedOrderResult) || !array_key_exists("prepay_id", $UnifiedOrderResult) || $UnifiedOrderResult['prepay_id'] == "") {
         throw new WxPayException("参数错误");
     }
     $jsapi = new WxPayJsApiPay();
     $jsapi->SetAppid($UnifiedOrderResult["appid"]);
     $timeStamp = time();
     $jsapi->SetTimeStamp("{$timeStamp}");
     $jsapi->SetNonceStr(WxPayApi::getNonceStr());
     $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']);
     $jsapi->SetSignType("MD5");
     $jsapi->SetPaySign($jsapi->MakeSign());
     $parameters = json_encode($jsapi->GetValues());
     return $parameters;
 }
Beispiel #3
0
 /**
  * 
  * 撤销订单,如果失败会重复调用10次
  * @param string $out_trade_no
  * @param 调用深度 $depth
  */
 public function cancel($out_trade_no, $depth = 0)
 {
     if ($depth > 10) {
         return false;
     }
     $clostOrder = new WxPayReverse();
     $clostOrder->SetOut_trade_no($out_trade_no);
     $result = WxPayApi::reverse($clostOrder);
     //接口调用失败
     if ($result["return_code"] != "SUCCESS") {
         return false;
     }
     //如果结果为success且不需要重新调用撤销,则表示撤销成功
     if ($result["result_code"] != "SUCCESS" && $result["recall"] == "N") {
         return true;
     } else {
         if ($result["recall"] == "Y") {
             return $this->cancel($out_trade_no, ++$depth);
         }
     }
     return false;
 }
Beispiel #4
0
    public function run()
    {
        //①、获取用户openid
        $tools = new JsApiPay();
        $openId = $tools->GetOpenid();
        //②、统一下单
        $input = new WxPayUnifiedOrder();
        $input->SetBody("test");
        $input->SetAttach("test");
        $input->SetOut_trade_no(WxPayConfig::$MCHID . date("YmdHis"));
        $input->SetTotal_fee("1");
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        $input->SetNotify_url(WxPayConfig::$NOTIFY_URL);
        $input->SetTrade_type("JSAPI");
        $input->SetOpenid($openId);
        $order = WxPayApi::unifiedOrder($input);
        $jsApiParameters = $tools->GetJsApiParameters($order);
        //获取共享收货地址js函数参数
        $editAddress = $tools->GetEditAddressParameters();
        return '<script type="text/javascript">
	//调用微信JS api 支付
	function jsApiCall()
	{
		WeixinJSBridge.invoke(
			"getBrandWCPayRequest",
			' . $jsApiParameters . ',
			function(res){
				WeixinJSBridge.log(res.err_msg);
				alert(res.err_code+res.err_desc+res.err_msg);
			}
		);
	}

	function callpay()
	{
		if (typeof WeixinJSBridge == "undefined"){
		    if( document.addEventListener ){
		        document.addEventListener("WeixinJSBridgeReady", jsApiCall, false);
		    }else if (document.attachEvent){
		        document.attachEvent("WeixinJSBridgeReady", jsApiCall); 
		        document.attachEvent("onWeixinJSBridgeReady", jsApiCall);
		    }
		}else{
		    jsApiCall();
		}
	}
	</script>
	<script type="text/javascript">
	//获取共享地址
	function editAddress()
	{
		WeixinJSBridge.invoke(
			"editAddress",
			' . $editAddress . ',
			function(res){
				var value1 = res.proviceFirstStageName;
				var value2 = res.addressCitySecondStageName;
				var value3 = res.addressCountiesThirdStageName;
				var value4 = res.addressDetailInfo;
				var tel = res.telNumber;
				
				alert(value1 + value2 + value3 + value4 + ":" + tel);
			}
		);
	}
	
	window.onload = function(){
		if (typeof WeixinJSBridge == "undefined"){
		    if( document.addEventListener ){
		        document.addEventListener("WeixinJSBridgeReady", editAddress, false);
		    }else if (document.attachEvent){
		        document.attachEvent("WeixinJSBridgeReady", editAddress); 
		        document.attachEvent("onWeixinJSBridgeReady", editAddress);
		    }
		}else{
			editAddress();
		}
	};
	
	</script>';
    }