Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Implementierung der WeChat-Scancode-Zahlungsfunktion mit PHP

Detaillierte Erläuterung der Implementierung der WeChat-Scancode-Zahlungsfunktion mit PHP

小云云
小云云Original
2018-03-31 15:36:272821Durchsuche

Führen Sie die WeChat-Zahlung auf dem WeChat-Mobiltelefon durch und rufen Sie die JSAPI-Zahlung direkt auf. Dies kann die Zahlung auf der in WeChat geöffneten Seite ermöglichen, z. B. in der WeChat Mall. Weitere Informationen zur JSAPI-Zahlung auf WeChat finden Sie unter: PHP implementiert WeChat-Zahlung (jsapi-Zahlung) und Rückerstattung (keine Integration des Zahlungs-SDK erforderlich) , aber manchmal hat das Einkaufszentrum auch eine PC-Seite, und Sie müssen die WeChat-Zahlung auf der PC-Seite verwenden um den Zahlungs-QR-Code auf der PC-Seite zu generieren und dann WeChat zu verwenden. Scannen Sie den QR-Code, um die Zahlung abzuschließen. Zum Beispiel:


Hier sprechen wir hauptsächlich über die spezifische Implementierung der Scancode-Zahlung und -Rückerstattung auf dem PC:

/**
 * 微信支付请求接口(POST)
 * @param string $goods_id 	商品ID
 * @param string $body 		商品简单描述
 * @param string $order_sn  订单编号
 * @param string $total_fee 金额
 * @return  json的数据
 */
public function wxpay($goods_id,$total_fee,$body,$order_sn){
	$config = $this->config;
	
	//统一下单参数构造
	$unifiedorder = array(
		'appid'			=> $config['appid'],
		'mch_id'		=> $config['mch_id'],
		'device_info'	=> 'WEB',
		'nonce_str'		=> self::getNonceStr(),
		'body'			=> $body,
		'out_trade_no'	=> $order_sn,
		'total_fee'		=> $total_fee * 100,
		'spbill_create_ip'	=> self::getip(),
		'notify_url'	=> 'http://'.$_SERVER['HTTP_HOST'].'/notify.php',
		'trade_type'	=> 'NATIVE',
		'product_id'	=> $goods_id
	);
	$unifiedorder['sign'] = self::makeSign($unifiedorder);
	
	//return $unifiedorder;
	
	//请求数据,统一下单
	$xmldata = self::array2xml($unifiedorder);
	$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
	$res = self::curl_post_ssl($url, $xmldata);
	if(!$res){
		return array('status'=>0, 'msg'=>"Can't connect the server" );
	}
	// 这句file_put_contents是用来查看服务器返回的结果 测试完可以删除了
	file_put_contents('./log.txt',$res,FILE_APPEND);
	
	$content = self::xml2array($res);
	if(strval($content['result_code']) == 'FAIL'){
		return array('status'=>0, 'msg'=>strval($content['err_code']).':'.strval($content['err_code_des']));
	}
	if(strval($content['return_code']) == 'FAIL'){
		return array('status'=>0, 'msg'=>strval($content['return_msg']));
	}
	
	return $content;
}

/**
 * 微信退款(POST)
 * @param string(28) $transaction_id 	在微信支付的时候,微信服务器生成的订单流水号,在支付通知中有返回
 * @param string $out_refund_no 		商品简单描述
 * @param string $total_fee 			微信支付的时候支付的总金额(单位:分)
 * @param string $refund_fee 			此次要退款金额(单位:分)
 * @return string						xml格式的数据
 */
public function refund($transaction_id,$out_refund_no,$total_fee,$refund_fee){
	$config = $this->config;
	
	//退款参数
	$refundorder = array(
		'appid'			=> $config['appid'],
		'mch_id'		=> $config['mch_id'],
		'nonce_str'		=> self::getNonceStr(),
		'transaction_id'=> $transaction_id,
		'out_refund_no'	=> $out_refund_no,
		'total_fee'		=> $total_fee * 100,
		'refund_fee'	=> $refund_fee * 100
	);
	$refundorder['sign'] = self::makeSign($refundorder);
	
	//请求数据,进行退款
	$xmldata = self::array2xml($refundorder);
	$url = 'https://api.mch.weixin.qq.com/secapi/pay/refund';
	$res = self::curl_post_ssl($url, $xmldata);
	if(!$res){
		return array('status'=>0, 'msg'=>"Can't connect the server" );
	}
	// 这句file_put_contents是用来查看服务器返回的结果 测试完可以删除了
	//file_put_contents('./log3.txt',$res,FILE_APPEND);
	
	$content = self::xml2array($res);
	if(strval($content['result_code']) == 'FAIL'){
		return array('status'=>0, 'msg'=>strval($content['err_code']).':'.strval($content['err_code_des']));
	}
	if(strval($content['return_code']) == 'FAIL'){
		return array('status'=>0, 'msg'=>strval($content['return_msg']));
	}
	
	return $content;
}

Zahlung und Rückerstattung sind so einfach, und es ist nicht erforderlich, die Benutzer-OpenID, keine Zertifikatsdatei und keine Konfiguration des Zahlungsautorisierungsverzeichnisses beim Bezahlen zu erhalten. Dies ist die Implementierung der gekapselten Zahlungsklassendatei Die Aufrufmethode ist einfacher:

require_once "webwxpay.class.php";

$config = array(
	'appid'			=> 'wx123456789876',
	'mch_id'	 	=> '123456789',
	'pay_apikey' 	=> '123456789876123456789876123456789876'
);

$wxpay = new WxPay($config);
$result = $wxpay->paytest();
//print_r($result);
scerweima($result['code_url']);		//生成的支付二维码,用户可以扫码付款

Zu diesem Zeitpunkt wird der Zahlungs-QR-Code generiert und dann auf WeChat gescannt, um die Zahlung abzuschließen:


Was die Zahlungsrückrufüberprüfung betrifft, werde ich hier nicht zu sehr ins Detail gehen. Wenn Sie es nicht verstehen, können Sie Der Prozess der Implementierung der WeChat-Zahlung lesen (jsapi payment) in ThinkPHP , das detailliert erklärt, wie mit Rückrufen umgegangen wird.

Verwandte Empfehlungen:

PHP implementiert die WeChat-Scancode-Zahlungsfunktion

PHP-Code zur Implementierung des WeChat-Scancodes Zahlungsfunktion Teilen

PHP-Beispiel-Tutorial: Nach erfolgreicher Zahlung automatisch per WeChat-Scancode auf dem PC springen

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Implementierung der WeChat-Scancode-Zahlungsfunktion mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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