支付--微信APP

来源:互联网 发布:多益网络账号登陆 编辑:程序博客网 时间:2024/04/30 08:04

微信APP支付同公众号支付调用的接口一样,部分参数不一样,需要特别注意。

相关签名算法实现、随机数生成、数组XML转换、curl发送post请求可参看上一篇博客《支付-微信公众号》。

统一下单接口:

    public function prePay($body,$userIp,$orderNo, $price){


        $postData = [
            "appid"     => self::OPEN_ID,
            "mch_id"    => self::MCH_ID,
            "nonce_str" => self::getNonceStr(),
            "body"      => $body,
            "out_trade_no"  => $orderNo,
            "total_fee"    => (int)($price*100),//微信以分为单位
            "spbill_create_ip"  => $userIp,
            "notify_url"        => self::notify_url,
            "trade_type"        => "APP"
        ];

        $postData["sign"] = self::getSign($postData, self::APP_KEY);
        $postData = self::arrayToXml($postData);

        $response = self::xmlToArray(self::curlPost(self::API_UNIFIED_ORDER, $postData));

        if (isset($response["return_code"]) && $response["return_code"] == "SUCCESS"){
            if ($response["result_code"] == "SUCCESS"){
                $res = [
                    "prepayid"  => $response["prepay_id"],
                    "partnerid" => self::MCH_ID,
                    "appid"     => self::OPEN_ID,
                    "package"   => "Sign=WXpay",
                    "noncestr"  => self::getNonceStr(),
                    "timestamp" => time()
                ];
                $res["sign"] = self::getSign($res, self::APP_KEY);
                return $res;//app端调起支付所需参数
            }
        }
        return [];
    }

调起微信APP支付所需的参数中,要特别注意package参数,APP支付固定写成“Sign=WXpay”,而不是公众号支付时的“prepay_id=***”,官方文档上示例是“Sign=WXPay”,但似乎在ios会出问题,反正写成“Sign=WXpay”能调起。

关单接口、查询接口、异步通知接口等等,同公众号支付基本无差别,传入对应参数就可以了,注意app支付和公众号支付用的参数appid、mchid之类的是不同的,要分别使用开放平台和公众平台给的值

0 0
原创粉丝点击