Rumah > rangka kerja php > ThinkPHP > ThinkPhp5.1 membuat pembayaran WeChat dan beberapa perihalan status selepas pembayaran

ThinkPhp5.1 membuat pembayaran WeChat dan beberapa perihalan status selepas pembayaran

XuPing.Yang
Lepaskan: 2022-02-10 18:00:57
asal
2404 orang telah melayarinya

Banyak kali, panggilan antara muka pembayaran WeChat perlu digunakan semasa pembangunan projek, seperti pengeluaran pusat membeli-belah, pembayaran dalam talian, pembayaran insurans, dsb. Editor baru-baru ini telah membina beberapa sistem caj yuran air, sistem pengeluaran surat jaminan dan dalam talian pendaftaran Sistem semua menggunakan pembayaran WeChat Pengeluaran pembayaran WeChat dan penerangan beberapa status selepas pembayaran disenaraikan di bawah.

1 WeChat Pay

[Imbas kod QR untuk membayar]

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;
}
Salin selepas log masuk

[Pembayaran antara muka JSAPI]

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;
}
Salin selepas log masuk

[Pesanan pertanyaan]

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;
}
Salin selepas log masuk

2 Tetapan parameter lampirkan semasa membayar di WeChat

lampirkan, penjelasan rasmi: data tambahan dikembalikan seperti dalam API pertanyaan dan pemberitahuan pembayaran , dan boleh digunakan sebagai parameter Tentukan tersuai untuk digunakan Dalam situasi sebenar, medan ini hanya akan dikembalikan jika pembayaran selesai. Kadangkala kita perlu memulangkan beberapa nilai tertentu apabila menanyakan pesanan semasa pembangunan, seperti: ID ahli, ID pesanan pembayaran, ID aplikasi, nama ahli, dll. Pada masa ini, kita boleh menggunakan attach untuk lulus parameter, tetapi attach ialah rentetan. Kadangkala Selalunya nilai yang diluluskan ialah tatasusunan, jadi anda hanya perlu menggunakan json_encode untuk penukaran, contohnya:

$remarks = array(
    &#39;cid&#39;=>1,
    &#39;member_id&#39;=>2,
    &#39;apply_id&#39;=>28,
);
$attach = json_encode($remarks);
Salin selepas log masuk

Selepas menanyakan pesanan, gunakan json_decode untuk penukaran, contohnya:

$arr = json_decode($result[&#39;attach&#39;],true);
Salin selepas log masuk

$arr yang diperoleh di sini ialah tatasusunan, yang boleh dipanggil terus mengikut peraturan panggilan tatasusunan

3 Beberapa status pembayaran WeChat

Apabila maklumat pesanan yang ditanya Apabila ia tidak wujud, pulangan adalah seperti berikut:

array(9) {
  ["appid"] => string(18) "公众号APPId"
  ["err_code"] => string(13) "ORDERNOTEXIST"
  ["err_code_des"] => string(15) "订单不存在"
  ["mch_id"] => string(10) "商户ID"
  ["nonce_str"] => string(16) "H0K6KPemexExM5DV"
  ["result_code"] => string(4) "FAIL"
  ["return_code"] => string(7) "SUCCESS"
  ["return_msg"] => string(2) "OK"
  ["sign"] => string(64) "8779CA8C7F4931B4296C19FFFB176A3111F74B7244123A0C0EB7AD8DB2B1BDA49DA"
}
Salin selepas log masuk

Apabila pembayaran untuk maklumat pesanan yang ditanya gagal, pulangan adalah seperti berikut:

array(11) {
  ["appid"] => string(18) "公众号APPId"
  ["attach"] => string(13) "你的传参值"
  ["mch_id"] => string(10) "商户ID"
  ["nonce_str"] => string(16) "BR3zfazCdI3vZj5e"
  ["out_trade_no"] => string(13) "1636555204840"
  ["result_code"] => string(7) "SUCCESS"
  ["return_code"] => string(7) "SUCCESS"
  ["return_msg"] => string(2) "OK"
  ["sign"] => string(64) "7927EC724A7FDBFF034621B1EC492DB4D130AC13A43E4C66C7B6AD7889736CD5"
  ["trade_state"] => string(6) "NOTPAY"
  ["trade_state_desc"] => string(15) "订单未支付"
}
Salin selepas log masuk

Apabila maklumat pesanan yang ditanya wujud, pemulangan adalah seperti berikut:

array(21) {
  ["appid"] => string(18) "公众号APPId"
  ["attach"] => string(13) "你的传参值"
  ["bank_type"] => string(10) "LZB_CREDIT"
  ["cash_fee"] => string(4) "2000"
  ["cash_fee_type"] => string(3) "CNY"
  ["fee_type"] => string(3) "CNY"
  ["is_subscribe"] => string(1) "Y"
  ["mch_id"] => string(10) "商户ID"
  ["nonce_str"] => string(16) "Y8iYqXqHfs22hexX"
  ["openid"] => string(28) "支付者微信openid"
  ["out_trade_no"] => string(13) "1636600772812"
  ["result_code"] => string(7) "SUCCESS"
  ["return_code"] => string(7) "SUCCESS"
  ["return_msg"] => string(2) "OK"
  ["sign"] => string(64) "7AC36F5EA6C4EE5D33584F0F1CDB54F804F0B196B49B61A4FFB6C045D521DA3C"
  ["time_end"] => string(14) "20211111111938"
  ["total_fee"] => string(4) "2000"
  ["trade_state"] => string(7) "SUCCESS"
  ["trade_state_desc"] => string(12) "支付成功"
  ["trade_type"] => string(5) "JSAPI"
  ["transaction_id"] => string(28) "4200001198202111115284536175"
}
Salin selepas log masuk

Pembayaran asli berjaya

array(22) {
  ["appid"] => string(18) "公众号APPId"
  ["attach"] => string(13) "你的传参值"
  ["bank_type"] => string(6) "OTHERS"
  ["cash_fee"] => string(1) "1"
  ["cash_fee_type"] => string(3) "CNY"
  ["device_info"] => string(1) "1"
  ["fee_type"] => string(3) "CNY"
  ["is_subscribe"] => string(1) "Y"
  ["mch_id"] => string(10) "商户ID"
  ["nonce_str"] => string(16) "Y8iYqXqHfs22hexX"
  ["openid"] => string(28) "支付者微信openid"
  ["out_trade_no"] => string(13) "1642682408295"
  ["result_code"] => string(7) "SUCCESS"
  ["return_code"] => string(7) "SUCCESS"
  ["return_msg"] => string(2) "OK"
  ["sign"] => string(64) "2F25084A568BBDA805DA8EE3FEB846448C9778DCBC2B745E8210D950E0742E38"
  ["time_end"] => string(14) "20220120204024"
  ["total_fee"] => string(1) "1"
  ["trade_state"] => string(7) "SUCCESS"
  ["trade_state_desc"] => string(12) "支付成功"
  ["trade_type"] => string(6) "NATIVE"
  ["transaction_id"] => string(28) "4200001358202201201811257221"
}
Salin selepas log masuk

Cadangan berkaitan: "

Atas ialah kandungan terperinci ThinkPhp5.1 membuat pembayaran WeChat dan beberapa perihalan status selepas pembayaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan