Implement WeChat scan code payment php code sharing

小云云
Release: 2023-03-20 12:34:01
Original
3614 people have browsed it

Scan QR code payment has become a popular method of transaction. In this article, we mainly share with you the php code to implement WeChat scan QR code payment, hoping to help everyone.

1. You need to use WeChat to scan the QR code to pay,
payment file pay.php

createJsBizPackage($payAmount,$outTradeNo,$orderName,$notifyUrl,$payTime);//生成二维码$url2 = $arr['code_url'];//echo "";class WxpayService{
    protected $mchid;    protected $appid;    protected $apiKey;    public function __construct($mchid, $appid, $key)
    {
        $this->mchid = $mchid;        $this->appid = $appid;        $this->apiKey = $key;
    }    /**
     * 发起订单
     * @param float $totalFee 收款总费用 单位元
     * @param string $outTradeNo 唯一的订单号
     * @param string $orderName 订单名称
     * @param string $notifyUrl 支付结果通知url 不要有问号
     * @param string $timestamp 订单发起时间
     * @return array
     */
    public function createJsBizPackage($totalFee, $outTradeNo, $orderName, $notifyUrl, $timestamp)
    {
        $config = array(            'mch_id' => $this->mchid,            'appid' => $this->appid,            'key' => $this->apiKey,
        );        //$orderName = iconv('GBK','UTF-8',$orderName);
        $unified = array(            'appid' => $config['appid'],            'attach' => 'pay',             //商家数据包,原样返回,如果填写中文,请注意转换为utf-8
            'body' => $orderName,            'mch_id' => $config['mch_id'],            'nonce_str' => self::createNonceStr(),            'notify_url' => $notifyUrl,            'out_trade_no' => $outTradeNo,            'spbill_create_ip' => '127.0.0.1',            'total_fee' => intval($totalFee * 100),       //单位 转为分
            'trade_type' => 'NATIVE',
        );        $unified['sign'] = self::getSign($unified, $config['key']);        $responseXml = self::curlPost('https://api.mch.weixin.qq.com/pay/unifiedorder', self::arrayToXml($unified));        $unifiedOrder = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);        if ($unifiedOrder === false) {            die('parse xml error');
        }        if ($unifiedOrder->return_code != 'SUCCESS') {            die($unifiedOrder->return_msg);
        }        if ($unifiedOrder->result_code != 'SUCCESS') {            die($unifiedOrder->err_code);
        }        $codeUrl = (array)($unifiedOrder->code_url);        if(!$codeUrl[0]) exit('get code_url error');        $arr = array(            "appId" => $config['appid'],            "timeStamp" => $timestamp,            "nonceStr" => self::createNonceStr(),            "package" => "prepay_id=" . $unifiedOrder->prepay_id,            "signType" => 'MD5',            "code_url" => $codeUrl[0],
        );        $arr['paySign'] = self::getSign($arr, $config['key']);        return $arr;
    }    public function notify()
    {
        $config = array(            'mch_id' => $this->mchid,            'appid' => $this->appid,            'key' => $this->apiKey,
        );        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);        if ($postObj === false) {            die('parse xml error');
        }        if ($postObj->return_code != 'SUCCESS') {            die($postObj->return_msg);
        }        if ($postObj->result_code != 'SUCCESS') {            die($postObj->err_code);
        }        $arr = (array)$postObj;        unset($arr['sign']);        if (self::getSign($arr, $config['key']) == $postObj->sign) {            echo '';            return $postObj;
        }
    }    /**
     * curl get
     *
     * @param string $url
     * @param array $options
     * @return mixed
     */
    public static function curlGet($url = '', $options = array())
    {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);        if (!empty($options)) {
            curl_setopt_array($ch, $options);
        }        //https请求 不验证证书和host
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);        $data = curl_exec($ch);
        curl_close($ch);        return $data;
    }    public static function curlPost($url = '', $postData = '', $options = array())
    {
        if (is_array($postData)) {            $postData = http_build_query($postData);
        }        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数
        if (!empty($options)) {
            curl_setopt_array($ch, $options);
        }        //https请求 不验证证书和host
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);        $data = curl_exec($ch);
        curl_close($ch);        return $data;
    }    public static function createNonceStr($length = 16)
    {
        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';        $str = '';        for ($i = 0; $i < $length; $i++) {            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }        return $str;
    }    public static function arrayToXml($arr)
    {
        $xml = "";        foreach ($arr as $key => $val) {            if (is_numeric($val)) {                $xml .= "<" . $key . ">" . $val . "";
            } else
                $xml .= "<" . $key . ">";
        }        $xml .= "";        return $xml;
    }    /**
     * 获取签名
     */
    public static function getSign($params, $key)
    {
        ksort($params, SORT_STRING);        $unSignParaString = self::formatQueryParaMap($params, false);        $signStr = strtoupper(md5($unSignParaString . "&key=" . $key));        return $signStr;
    }    protected static function formatQueryParaMap($paraMap, $urlEncode = false)
    {
        $buff = "";
        ksort($paraMap);        foreach ($paraMap as $k => $v) {            if (null != $v && "null" != $v) {                if ($urlEncode) {                    $v = urlencode($v);
                }                $buff .= $k . "=" . $v . "&";
            }
        }        $reqPar = '';        if (strlen($buff) > 0) {            $reqPar = substr($buff, 0, strlen($buff) - 1);
        }        return $reqPar;
    }
}?> <?=$g_webname?>微信支付
Copy after login

2. Callback file notify.php

notify();//file_put_contents('2.txt',json_encode($result));//测试结果//$result['transaction_id']为微信交易号 if($result){    if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)&& $result["return_code"] == "SUCCESS"&& $result["result_code"] == "SUCCESS"){    //file_put_contents('1.txt',1);$sj=date("Y-m-d H:i:s");$uip=$_SERVER["REMOTE_ADDR"];$sql="select * from yjcode_dingdang where bh='".$result['out_trade_no']."' and ifok=0";mysql_query("SET NAMES 'GBK'");$res=mysql_query($sql);if($row=mysql_fetch_array($res)){
 updatetable("yjcode_dingdang","sj='".$sj."',uip='".$uip."',alipayzt='TRADE_SUCCESS',ddzt='交易成功',ifok=1 ,wxddbh=".$result['transaction_id']." where id=".$row[id]); $money1=$row['money1'];
 PointIntoM($row['userid'],"微信充值".$money1."元",$money1);
 PointUpdateM($row[userid],$money1);
}            return true;
        }


}else{    echo 'pay error';
}class WxpayService{
    protected $mchid;    protected $appid;    protected $apiKey;    public function __construct($mchid, $appid, $key)
    {
        $this->mchid = $mchid;        $this->appid = $appid;        $this->apiKey = $key;
    }    public function notify()
    {
        $config = array(            'mch_id' => $this->mchid,            'appid' => $this->appid,            'key' => $this->apiKey,
        );        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);        if ($postObj === false) {            die('parse xml error');
        }        if ($postObj->return_code != 'SUCCESS') {            die($postObj->return_msg);
        }        if ($postObj->result_code != 'SUCCESS') {            die($postObj->err_code);
        }        $arr = (array)$postObj;        unset($arr['sign']);        if (self::getSign($arr, $config['key']) == $postObj->sign) {            echo '';            return $arr;
        }
    }    /**
     * 获取签名
     */
    public static function getSign($params, $key)
    {
        ksort($params, SORT_STRING);        $unSignParaString = self::formatQueryParaMap($params, false);        $signStr = strtoupper(md5($unSignParaString . "&key=" . $key));        return $signStr;
    }    protected static function formatQueryParaMap($paraMap, $urlEncode = false)
    {
        $buff = "";
        ksort($paraMap);        foreach ($paraMap as $k => $v) {            if (null != $v && "null" != $v) {                if ($urlEncode) {                    $v = urlencode($v);
                }                $buff .= $k . "=" . $v . "&";
            }
        }        $reqPar = '';        if (strlen($buff) > 0) {            $reqPar = substr($buff, 0, strlen($buff) - 1);
        }        return $reqPar;
    }
}
Copy after login

Related recommendations:

nodejs implements the WeChat code scanning payment function

After the PC side WeChat scanning code payment is successful, it will automatically jump to the PHP version code sharing

WeChat scan code payment mode

The above is the detailed content of Implement WeChat scan code payment php code sharing. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!