Home
WeChat Applet
Mini Program Development
About WeChat Payment Mini Program v3 [With PHP complete backend code]



WeChat Payment Mini Program (v3) - PHP complete back-end code
There are too many pitfalls, so I won’t go into details. Let’s go directly to the complete back-end code
<?php header('Content-type:text/html; Charset=utf-8'); ini_set('date.timezone','Asia/Shanghai'); $data_s = file_get_contents('php://input'); $data_s = json_decode($data_s,true); //統(tǒng)一下單 function wechartAddOrder($name,$ordernumber,$money,$openid,$timeStamp,$noncestr){ $url = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi"; $urlarr = parse_url($url); $appid = '小程序APPID';//appID $mchid = '微信支付商戶ID';//商戶ID $xlid = '微信支付公鑰序列號(hào)';//秘鑰序列號(hào) 可在這個(gè)網(wǎng)址中查詢 https://myssl.com/cert_decode.html $data = array(); $time = $timeStamp; $data['appid'] = $appid; $data['mchid'] = $mchid; $data['description'] = $name;//商品描述 $data['out_trade_no'] = $ordernumber;//訂單編號(hào) $data['notify_url'] = "你的域名/你的支付目錄路徑/notify.php";//回調(diào)接口 需根據(jù)自己的情況修改 $data['amount']['total'] = intval($money * 1);//金額 單位 分 $data['payer']['openid'] = $openid;//用戶openID $data = json_encode($data); $key = getSign($data,$urlarr['path'],$noncestr,$time);//簽名 $token = sprintf('mchid="%s",serial_no="%s",nonce_str="%s",timestamp="%d",signature="%s"',$mchid,$xlid,$noncestr,$time,$key);//頭部信息 $header = array( 'Content-Type:'.'application/json; charset=UTF-8', 'Accept:application/json', 'User-Agent:*/*', 'Authorization: WECHATPAY2-SHA256-RSA2048 '.$token ); $ret = curl_post_https($url,$data,$header); $ret = ltrim($ret,'{"prepay_id":"'); $ret = rtrim($ret,'}"'); //微信支付(小程序)簽名 $str = getWechartSign($appid,$timeStamp,$noncestr,'prepay_id='.$ret); $arr = array('appid'=>$appid,'timestamp'=>$timeStamp,'package'=>'prepay_id='.$ret,'paySign'=>$str); exit(json_encode($arr)); } $set_body = '支付測(cè)試';//支付顯示內(nèi)容 $price = '1';//支付金額 $out_trade_no = $data_s['out_trade_no'];//訂單號(hào) $timeStamp = $data_s['timeStamp'];//時(shí)間戳 $openid = $data_s['openid']; $noncestr = $data_s['nonceStr']; wechartAddOrder($set_body,$out_trade_no,$price,$openid,$timeStamp,$noncestr); //微信支付簽名 function getSign($data=array(),$url,$randstr,$time){ $str = "POST"."\n".$url."\n".$time."\n".$randstr."\n".$data."\n"; $key = file_get_contents('apiclient_key.pem');//在商戶平臺(tái)下載的秘鑰 $str = getSha256WithRSA($str,$key); return $str; } //調(diào)起支付的簽名 function getWechartSign($appid,$timeStamp,$noncestr,$prepay_id){ $str = $appid."\n".$timeStamp."\n".$noncestr."\n".$prepay_id."\n"; $key = file_get_contents('apiclient_key.pem'); $str = getSha256WithRSA($str,$key); return $str; } function getSha256WithRSA($content, $privateKey){ $binary_signature = ""; $algo = "SHA256"; openssl_sign($content, $binary_signature, $privateKey, $algo); $sign = base64_encode($binary_signature); return $sign; } /* PHP CURL HTTPS POST */ function curl_post_https($url,$data,$header){ // 模擬提交數(shù)據(jù)函數(shù) $curl = curl_init(); // 啟動(dòng)一個(gè)CURL會(huì)話 curl_setopt($curl, CURLOPT_URL, $url); // 要訪問(wèn)的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對(duì)認(rèn)證證書來(lái)源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從證書中檢查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模擬用戶使用的瀏覽器 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動(dòng)跳轉(zhuǎn) curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動(dòng)設(shè)置Referer curl_setopt($curl, CURLOPT_POST, 1); // 發(fā)送一個(gè)常規(guī)的Post請(qǐng)求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的數(shù)據(jù)包 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設(shè)置超時(shí)限制防止死循環(huán) curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區(qū)域內(nèi)容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回 curl_setopt($curl, CURLOPT_HTTPHEADER, $header); $tmpInfo = curl_exec($curl); // 執(zhí)行操作 if (curl_errno($curl)) { echo 'Errno'.curl_error($curl);//捕抓異常 } curl_close($curl); // 關(guān)閉CURL會(huì)話 return $tmpInfo; // 返回?cái)?shù)據(jù),json格式 }
Check whether the order payment is completed
header('Content-type:text/html; Charset=utf-8'); ini_set('date.timezone','Asia/Shanghai'); $data_s = file_get_contents('php://input'); $data_s = json_decode($data_s,true); if(empty($data_s['out_trade_no'])){ exit; } $out_trade_no = $data_s['out_trade_no'];//訂單號(hào) $merchant_id = '商戶ID';//商戶ID $mch_private_key = file_get_contents('apiclient_key.pem');//在商戶平臺(tái)下載的秘鑰 $xlid = '微信支付公鑰序列號(hào)';//秘鑰序列號(hào) 可在這個(gè)網(wǎng)址中查詢 https://myssl.com/cert_decode.html $url = 'https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/'.$out_trade_no.'?mchid='.$merchant_id; $url_parts = parse_url($url); $http_method = 'GET'; $timestamp = time(); $nonce = md5(time().$out_trade_no); $body = ''; $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : "")); $message = $http_method."\n". $canonical_url."\n". $timestamp."\n". $nonce."\n". $body."\n"; openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption'); $sign = base64_encode($raw_sign); $schema = 'WECHATPAY2-SHA256-RSA2048'; $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"',$merchant_id, $nonce, $timestamp, $xlid, $sign); $header = array( 'Content-Type:'.'application/json; charset=UTF-8', 'Accept:application/json', 'User-Agent:*/*', 'Authorization: WECHATPAY2-SHA256-RSA2048 '.$token ); $ret = curl_get_https($url,$data,$header); $return_out_trade_no = get_between($ret,'"out_trade_no":"','","payer"'); $return_trade_state = get_between($ret,'trade_state":"','","trade_state_desc"'); $arr = array('type'=>'success','trade_state'=>$return_trade_state,'out_trade_no'=>$return_out_trade_no); exit(json_encode($arr)); /* * php截取指定兩個(gè)字符之間字符串 * */ function get_between($input, $start, $end) { $substr = substr($input, strlen($start)+strpos($input, $start),(strlen($input) - strpos($input, $end))*(-1)); return $substr; } /* PHP CURL HTTPS GET */ function curl_get_https($url,$data,$header){ // 模擬提交數(shù)據(jù)函數(shù) $curl = curl_init(); // 啟動(dòng)一個(gè)CURL會(huì)話 curl_setopt($curl, CURLOPT_URL, $url); // 要訪問(wèn)的地址 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模擬用戶使用的瀏覽器 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動(dòng)跳轉(zhuǎn) curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動(dòng)設(shè)置Referer curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設(shè)置超時(shí)限制防止死循環(huán) curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區(qū)域內(nèi)容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回 curl_setopt($curl, CURLOPT_HTTPHEADER, $header);// 頭部信息 $tmpInfo = curl_exec($curl); // 執(zhí)行操作 if (curl_errno($curl)) { echo 'Errno'.curl_error($curl);//捕抓異常 } curl_close($curl); // 關(guān)閉CURL會(huì)話 return $tmpInfo; // 返回?cái)?shù)據(jù),json格式 }
The above is the detailed content of About WeChat Payment Mini Program v3 [With PHP complete backend code]. For more information, please follow other related articles on the PHP Chinese website!
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

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article
Grass Wonder Build Guide | Uma Musume Pretty Derby
3 weeks ago
By Jack chen
Roblox: 99 Nights In The Forest - All Badges And How To Unlock Them
3 weeks ago
By DDD
Uma Musume Pretty Derby Banner Schedule (July 2025)
4 weeks ago
By Jack chen
Today's Connections hint and answer 3rd July for 753
1 months ago
By Jack chen
Windows Security is blank or not showing options
4 weeks ago
By 下次還敢

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)
