入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

PHP微信支付之扫码支付

创建时间:2017-10-17 投稿人: 浏览次数:2888

在手机微信端进行微信支付,直接调起JSAPI支付,这可以实现在微信里边的开的页面进行支付,比如微商城,微信端JSAPI支付详见:PHP实现微信支付(jsapi支付)和退款(无需集成支付SDK);但有时候商城还有PC端,需要在PC端使用微信支付,则需要PC端生成支付二维码,然后微信扫码完成支付。例如:


这里主要讲一下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;
}
支付和退款就是这么简单,而且支付的时候无需获取用户openid,无需证书文件,无需配置支付授权目录,这是封装过的支付类文件的实现,调用方法更简单:

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"]);		//生成的支付二维码,用户可以扫码付款
这时候就会生成支付二维码,然后微信扫一扫就可以完成支付:


至于支付回调验证,这里就不过多讲了,不明白的可以看ThinkPHP中实现微信支付(jsapi支付)流程,这里详细讲了如何处理回调。

类文件以及使用实例代码源码下载:http://download.csdn.net/download/sinat_35861727/10026134

如果真的感觉好用,请点个赞留个好评,谢谢!有问题也可以评论区告诉我!

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。