Esempio n. 1
0
<?php 
$this->head();
?>
</head>

<body>
<?php 
$this->beginBody();
?>

	<?php 
use app\models\Wechat;
use app\models\MyWechat;
Yii::$app->wx->setParameterComm();
Yii::$app->wx->setParameter("body", urlencode("testjsjsjsjsa"));
Yii::$app->wx->setParameter("out_trade_no", Wechat::generateOutTradeNo());
Yii::$app->wx->setParameter("total_fee", "1");
Yii::$app->wx->setParameter("spbill_create_ip", "127.0.0.1");
?>

	<script language="javascript">
	function callpay()
	{
		WeixinJSBridge.invoke('getBrandWCPayRequest',<?php 
echo Yii::$app->wx->create_biz_package();
?>
,function(res){
		WeixinJSBridge.log(res.err_msg);
		alert(res.err_code+res.err_desc+res.err_msg);
		if(res.err_msg == 'get_brand_wcpay_request:ok') {
			alert('ok');
Esempio n. 2
0
    public function actionPaynotifyv2()
    {
        U::W(['actionPaynotify', $_GET, $_POST]);
        // receive the pay notify from wx server and save the order to db
        // POST data
        if (Yii::$app->wx->localTest) {
            $postStr = <<<EOD
            <xml>
            <OpenId><![CDATA[111222]]></OpenId>
            <AppId><![CDATA[wx79c2bf0249ede62a]]></AppId>
            <IsSubscribe>1</IsSubscribe>
            <TimeStamp>1369743908</TimeStamp>
            <NonceStr><![CDATA[YvMZOX28YQkoU1i4NdOnlXB1]]></NonceStr>
            <AppSignature><![CDATA[a9274e4032a0fec8285f147730d88400392acb9e]]></AppSignature>
            <SignMethod><![CDATA[sha1]]></SignMethod >
            </xml>
EOD;
            /*
            
                        [0] => Array
                        (
                        [r] => wap/paynotify
                        [bank_billno] => 201408016461876
                        [bank_type] => 3006
                        [discount] => 0
                        [fee_type] => 1
                        [input_charset] => UTF-8
                        [notify_id] => 6qgi2XQy3Lg65VTEMfLiX-6o3Yh7d-e8gIVdcWQmUjCH9enV3oNg-8-aWOjbjk2xYbFmi4c0ec5RzldyH7CqFswIdDmAXv7Z
                        [out_trade_no] => 53db6263258cc
                        [partner] => 1220047701
                        [product_fee] => 1
                        [sign] => 9C83069BE5AFB74E9A353FC6CD190D05
                        [sign_type] => MD5
                        [time_end] => 20140801174831
                        [total_fee] => 1
                        [trade_mode] => 1
                        [trade_state] => 0
                        [transaction_id] => 1220047701201408013245460110
                        [transport_fee] => 0
                        )
            
                        // Note: this OpenId and AppId is money receiver woso, not xiangyang!
                        [1] => Array
                        (
                        [OpenId] => oSHFKsycXkOO3JNwifurCR7Z9-qc
                        [AppId] => wx79c2bf0249ede62a
                        [IsSubscribe] => 0
                        [TimeStamp] => 1406886511
                        [NonceStr] => 2AyW087NTmQxIXuf
                        [AppSignature] => a52c16bb2291995b1441b3255f4e3f2a048e8c3c
                        [SignMethod] => sha1
                        )
            */
            $_GET['out_trade_no'] = Wechat::generateOutTradeNo();
            $_GET['sign'] = 'sign';
            $_GET['trade_mode'] = 1;
            $_GET['trade_state'] = 0;
            $_GET['partner'] = '1209999999';
            $_GET['bank_type'] = 'WX';
            $_GET['totel_fee'] = 19900;
            $_GET['fee_type'] = 1;
            $_GET['notify_id'] = Wechat::generateOutTradeNo();
            $_GET['transaction_id'] = '1209999999' . date('Ymd') . substr(uniqid(), -10);
            $_GET['time_end'] = date("YmdHis");
        } else {
            $postStr = Yii::$app->wx->getPostStr();
        }
        if (empty($postStr)) {
            U::W(['No postStr from wx server', __METHOD__, $GLOBALS]);
            exit;
        }
        $arr = (array) simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        //we should check $arr signature first
        if (Yii::$app->wx->debug) {
            U::W([$_GET, $arr]);
        }
        if (empty($arr['AppId'])) {
            U::W(['No AppId from wx server', __METHOD__, $postStr]);
            exit;
        }
        // GET data  (!isset($_GET['bank_type'])) ||
        if (!isset($_GET['out_trade_no']) || !isset($_GET['sign']) || !isset($_GET['trade_mode']) || !isset($_GET['trade_state']) || !isset($_GET['partner']) || !isset($_GET['total_fee']) || !isset($_GET['fee_type']) || !isset($_GET['notify_id']) || !isset($_GET['transaction_id']) || !isset($_GET['time_end'])) {
            U::W(['Invalid GET data from wx server...', __METHOD__, $_GET, $_POST]);
            exit;
        }
        //$attach = Yii::$app->request->get('attach', '');
        $order = MOrder::findOne($_GET["out_trade_no"]);
        if ($order === null) {
            U::W(['oid does not exist!', __METHOD__, $_GET, $_POST]);
            return 'success';
        }
        if ($_GET['trade_state'] == 0) {
            $order->status = MOrder::STATUS_SUCCEEDED;
        } else {
            U::W(['status error', __METHOD__, $_GET, $_POST]);
        }
        $order->notify_id = $_GET['notify_id'];
        $order->partner = $_GET['partner'];
        $order->time_end = $_GET['time_end'];
        $order->total_fee = $_GET['total_fee'];
        $order->trade_state = $_GET['trade_state'];
        $order->transaction_id = $_GET['transaction_id'];
        $order->appid_recv = $arr['AppId'];
        $order->openid_recv = $arr['OpenId'];
        $order->issubscribe_recv = $arr['IsSubscribe'];
        $order->pay_kind = MOrder::PAY_KIND_WECHAT;
        $order->save(false);
        if ($_GET['trade_state'] == 0) {
            Yii::$app->wx->clearGh();
            Yii::$app->wx->setAppId($arr['AppId']);
            $arr = Yii::$app->wx->WxPayDeliverNotify($arr['OpenId'], $_GET['transaction_id'], $_GET["out_trade_no"]);
            //U::W($arr);
            try {
                Yii::$app->wx->clearGh();
                Yii::$app->wx->setGhId($order->gh_id);
                $arr = Yii::$app->wx->WxMessageCustomSend(['touser' => $order->openid, 'msgtype' => 'text', 'text' => ['content' => $order->getWxNotice(true)]]);
                //U::W($arr);
            } catch (\Exception $e) {
                U::W($e->getCode() . ':' . $e->getMessage());
            }
        } else {
            U::W(['trade_state is not 0', __METHOD__, $_GET, $_POST]);
        }
        return 'success';
    }