ThinkPhp5.1 ermöglicht WeChat-Zahlungen und verschiedene Statusbeschreibungen nach der Zahlung

XuPing.Yang
Freigeben: 2022-02-10 18:00:57
Original
2348 Leute haben es durchsucht

Während der Projektentwicklung müssen häufig WeChat-Zahlungsschnittstellenaufrufe verwendet werden, z. B. bei der Produktion von Einkaufszentren, Online-Zahlungen, Versicherungszahlungen usw. Der Herausgeber hat kürzlich mehrere Systeme zur Erhebung von Wassergebühren, Systeme zur Ausstellung von Garantieschreiben und zur Online-Registrierung entwickelt Die WeChat-Zahlungssysteme werden in allen Systemen verwendet und ich hoffe, dass sie für alle hilfreich sind.

1 wird unverändert in der Abfrage-API und der Zahlungsbenachrichtigung zurückgegeben und kann als benutzerdefinierter Parameter verwendet werden. Unter tatsächlichen Umständen wird dieses Feld nur im Zahlungsabschlussstatus zurückgegeben. Manchmal müssen wir beim Abfragen von Bestellungen während der Entwicklung einige bestimmte Werte zurückgeben, z. B. Mitglieds-ID, Zahlungsauftrags-ID, Anwendungs-ID, Mitgliedsname usw. Derzeit können wir „attach“ zum Übergeben von Parametern verwenden, „attach“ ist jedoch ein string. Manchmal ist der übergebene Wert ein Array, sodass Sie zum Konvertieren nur json_encode verwenden müssen, zum Beispiel:

public function wxPayImg($body,$out_trade_no,$fee,$product_id,$logo,$path,$attach,$pro_id){
    require_once Env::get('app_path')."api/wxpay/lib/WxPay.Api.php";
    //实例化配置信息
    $config = new WxPayConfig();
    $input = new \WxPayUnifiedOrder();
    //设置商品描述
    $input->SetBody($body);
    //设置订单号
    $input->SetOut_trade_no($out_trade_no);
    //设置商品金额(单位:分)
    $input->SetTotal_fee($fee);
    //设置异步通知地址
    $notify = $config->GetNotifyUrl();
    $input->SetNotify_url($notify);
    //设置交易类型
    $input->SetTrade_Type('NATIVE');
    //设置商品ID
    $input->SetProduct_id($product_id);
    $input->SetDevice_info($pro_id);
    $input->SetAttach($attach);
    //调用统一下单API
    $result = \WxPayApi::unifiedOrder($config,$input);
    //dump($result);
    $qr_url = $result['code_url'];
    $img = $this->createCode($qr_url,$logo,$path);
    //生成数组
    $array = array('img'=>$img,'out_trade_no'=>$out_trade_no);
    return $array;
}
//生成二维码
public function createCode($code_url,$logo,$path){
    //创建基本的QR码
    $qrCode = new QrCode($code_url);
    $qrCode->setSize(300);
    //设置高级选项
    $qrCode->setWriterByName('png');
    $qrCode->setEncoding('UTF-8');
    $qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH());
    $qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]);
    $qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]);
    //$qrCode->setLabel('', 16, App::getAppPath().'/../public/static/user/font/msyhl.ttc', LabelAlignment::CENTER());
    $qrCode->setLogoPath($logo);
    $qrCode->setLogoWidth(50);
    $qrCode->setValidateResult(false);
    //边距设置
    $qrCode->setMargin(10);
    //直接输出二维码
    header('Content-Type: '.$qrCode->getContentType());
    //echo $qrCode->writeString();
    //将二维码保存到指定目录
    $qrCode->writeFile($path);
    //生成数据URI以内联图像数据(即在<img>标记内)
    $dataUri = $qrCode->writeDataUri();
    return $dataUri;
}
Nach dem Login kopieren

Nach der Abfrage der Reihenfolge verwenden Sie json_decode zum Konvertieren, zum Beispiel:

public function jsApiPay($openId,$Body,$out_trade_no,$fee,$product_id,$attach){
    require_once Env::get(&#39;app_path&#39;)."api/wxpay/lib/WxPay.Api.php";
    $tools = new JsApiPay();
    $input = new \WxPayUnifiedOrder();
    //设置商品描述
    $input->SetBody($Body);
    //设置订单号
    $input->SetOut_trade_no($out_trade_no);
    //设置商品金额(单位:分)
    $input->SetTotal_fee($fee);
    //设置异步通知地址
    $config = new WxPayConfig();
    $notify = $config->GetNotifyUrl();
    $input->SetNotify_url($notify);
    //设置交易类型
    $input->SetTrade_Type(&#39;JSAPI&#39;);
    //设置商品ID
    $input->SetProduct_id($product_id);
    //用户openID
    $input->SetOpenid($openId);
    $input->SetAttach($attach);
    //调用统一下单API
    $result = \WxPayApi::unifiedOrder($config,$input);
    $jsApiParameters = $tools->GetJsApiParameters($result);
    return $jsApiParameters;
}
Nach dem Login kopieren

Das hier erhaltene $arr ist ein Array, das direkt folgt. Rufen Sie einfach die Aufrufregeln des Arrays auf Die Rückgabe lautet wie folgt:

public function QueryOrder($number,$transaction_id=NULL){
    require_once App::getAppPath().&#39;api/wxpay/lib/WxPay.Api.php&#39;;
    require_once App::getAppPath().&#39;api/wxpay/lib/WxPay.Notify.php&#39;;
    $input = new \WxPayOrderQuery();
    $input->SetOut_trade_no($number);
    $input->SetTransaction_id($transaction_id);
    $config = new WxPayConfig();
    $result = \WxPayApi::orderQuery($config, $input);
    if($result[&#39;result_code&#39;]==&#39;SUCCESS&#39;){
        if($result[&#39;trade_state&#39;]==&#39;SUCCESS&#39;){
            $arr = json_decode($result[&#39;attach&#39;],true);
            $pay_time = $this->getPayTime($result[&#39;time_end&#39;]);
            return [&#39;code&#39;=>100,&#39;result_code&#39;=>$result[&#39;result_code&#39;],&#39;attach&#39;=>$arr,&#39;pay_time&#39;=>$pay_time,&#39;result&#39;=>$result,&#39;msg&#39;=>"支付成功"];
        }else{
            return [&#39;code&#39;=>101,&#39;result_code&#39;=>$result[&#39;result_code&#39;],&#39;err_code&#39;=>$result[&#39;err_code&#39;],&#39;result&#39;=>$result,&#39;msg&#39;=>"订单未支付"];
        }
    }else{
        return [&#39;code&#39;=>103,&#39;result_code&#39;=>$result[&#39;result_code&#39;],&#39;result&#39;=>$result,&#39;msg&#39;=>"订单不存在"];
    }
    //dump($result);
    //return $result;
}
Nach dem Login kopieren

Wenn die abgefragten Bestellinformationen fehlschlagen. Wenn die Bestellinformationen vorhanden sind, lautet die Rückgabe wie folgt:

$remarks = array(
    &#39;cid&#39;=>1,
    &#39;member_id&#39;=>2,
    &#39;apply_id&#39;=>28,
);
$attach = json_encode($remarks);
Nach dem Login kopieren

Native Zahlung erfolgreich

$arr = json_decode($result[&#39;attach&#39;],true);
Nach dem Login kopieren

Verwandte Empfehlungen: „

Thinkphp-Video-Tutorial


Das Obige ist die Zusammenfassung einiger relevanter Kenntnisse über WeChat-Zahlungen durch den Herausgeber. Ich hoffe, es wird allen Entwicklern helfen!

Das obige ist der detaillierte Inhalt vonThinkPhp5.1 ermöglicht WeChat-Zahlungen und verschiedene Statusbeschreibungen nach der Zahlung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!