위챗 결제-기업에서 개인 잔돈으로 결제-개인 현금 인출 기능-사고방식
1. 기본 구성
// appid
$data["mch_appid"] = 'appid';
//
$data["mchid"] = '';
//
$data["nonce_str"] = 'suiji'.mt_rand(100,999);
//
$data["partner_trade_no"]=date('YmdHis').mt_rand(1000,9999);
// 100
$data["amount"] = $money;
//
$data["desc"] = ' ';
// openid
$data["openid"] = $openid;
//
$data["check_name"] = 'NO_CHECK';
// IP
$data['spbill_create_ip']=$_SERVER['SERVER_ADDR'];
//
$data['key']='';
// API
$data['apiclient_cert.pem']
$data['apiclient_key.pem']
2. PHP 코드
/**
**
/
public function userpay(){
$money = ‘ ’;
$info['money'] = ‘ ’;
if ($this->openid && $money){
if ($money>$info['money'] ){
echo json_encode([
'status' => 1,
'message' => ' , !',
'code'=>' , !'
]);
}elseif ($money<1){
echo json_encode([
'status' => 2,
'message' => ' 1 ',
'code'=>' '
]);
}else{
$openid = $this->openid;
$trade_no = date('YmdHis').mt_rand(1000,9999);
$res = $this->pay($openid,$trade_no,$money*100,' ');
//
if($res['result_code']=="SUCCESS"){
echo json_encode([
'status' => 3,
'message' => ' !',
]);
}elseif ($res['err_code']=="SENDNUM_LIMIT"){
echo json_encode([
'status' => 4,
'message' => ' !',
'code'=>' ',
]);
}else{
echo json_encode([
'status' => 5,
'message' => ' !',
'code'=>$res['err_code'],
]);
}
}
}else{
echo json_encode([
'status' => 5,
'message' => ' ~',
]);
}
}
3. 지불 방법
/**
*
/
public function pay($openid,$trade_no,$money,$desc){
$params["mch_appid"]='';
$params["mchid"] = '';
$params["nonce_str"]= 'suiji'.mt_rand(100,999);
$params["partner_trade_no"] = $trade_no;
$params["amount"]= $money;
$params["desc"]= $desc;
$params["openid"]= $openid;
$params["check_name"]= 'NO_CHECK';
$params['spbill_create_ip'] = $_SERVER['SERVER_ADDR'];
//
$str = 'amount='.$params["amount"].'&check_name='.$params["check_name"].'&desc='.$params["desc"].'&mch_appid='.$params["mch_appid"].'&mchid='.$params["mchid"].'&nonce_str='.$params["nonce_str"].'&openid='.$params["openid"].'&partner_trade_no='.$params["partner_trade_no"].'&spbill_create_ip='.$params['spbill_create_ip'].'&key= ';
//md5
$sign = strtoupper(md5($str));
//
$params['sign'] = $sign;
// XML
$xmldata = $this->array_to_xml($params); // XML
$url='https://api.mch.weixin.qq.com/mmpaymkttransfers/prom otion/transfers';
// post
$res = $this->curl_post_ssl($url, $xmldata); //curl
if(!$res){
return array('status'=>1,
'msg'=>" " );
}
//
$content = $this->xml_to_array($res); //xml
return $content;
}
/**
* curl
/
public function curl_post_ssl($url, $xmldata, $second=30,$aHeader=array()){
$ch = curl_init();
//
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
// ,
//curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
// PEM,
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
// dirname(__DIR__) , 58
curl_setopt($ch,CURLOPT_SSLCERT,' /apiclient_cert.pem');
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY,' /apiclient_key.pem');
if( count($aHeader) >= 1 ){
curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
}
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xmldata);
$data = curl_exec($ch);
if($data){
curl_close($ch);
return $data;
}
else {
$error = curl_errno($ch);
echo "call faild, errorCode:$error
";
die();
curl_close($ch);
return false;
}
}
/**
* array xml
*
*/
public function array_to_xml($arr){
$xml = "";
foreach ($arr as $key => $val) {
if (is_numeric($val)) {
$xml .= "".$val."".$key.">";
} else
$xml .= "".$key.">";
}
$xml .= " ";
return $xml;
}
/**
* xml array
*/
public function xml_to_array($xml){
// xml
libxml_disable_entity_loader(true);
$values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $values;
}
텍스트 링크:https://blog.csdn.net/qd55815634/article/details/78541491
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.