PHP小白记录小程序调起微信支付(JSAPI)注意点

①调起统一下单接口必须传参openid,可获取到prepay_id
②调起微信支付的其中某一个参数为prepay_id(必传)
③调起微信支付时参数中没有appId,但参于签名的参数中必须有appId(I大写)
④发起退款请求必须要API证书,证书是一个压缩包在申请支付时可获取,以后不可下载
⑤可以重新更改证书,一个自然年可更换三次,两次之间有时间差,慎重更换
⑥退款需要异步回调时,发起退款必须传参数notify_url回调地址
⑦退款异步回调时,微信返回一个xml字符串转成数组后还需要对返回结果中的req_info解码,解码流程看开发文档
⑧解码时需要调用php内置函数,其中mcrypt_decrypt被高版本废弃,建议使用openssl_decrypt
⑨所有微信支付接口的发送数据和接受数据都是xml字符串

下面是开发支付中实用的方法(用的php框架是ThinkPHP3.2.3)

// 微信支付签名
public function paySign($data){
	// 去除数组中的空值
	$data = array_filter($data);
	// 如果数组中有签名删除签名
	if (isset($data['sign'])) {
		unset($data['sign']);
	}
	//按照键名字典排序
	ksort($data);
	//生成URL格式的字符串
	foreach ($data as $k => $v) {
		$string .= $k . '=' . $v . '&';
	}
	$stringSignTemp = $string . "key=" . C('APP_KEY');
	// 生成sign
	$data['sign'] = strtoupper(md5($stringSignTemp));

	return $data;
}

// 支付结果回调
public function notifyUrl(){
	$testxml = file_get_contents("php://input");
	$jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
	$result = json_decode($jsonxml,true);

	echo 'SUCCESS';
}

// 退款结果解密
protected function refundDecrypt($str){
	$key = md5(C('APP_KEY'));
	$str = base64_decode($str);
	$str = openssl_decrypt($str, 'AES-256-ECB', $key, OPENSSL_RAW_DATA);
	return $str;
}

以后有新发现或改进继续编辑此文档,以上。

发布了3 篇原创文章 · 获赞 0 · 访问量 46

猜你喜欢

转载自blog.csdn.net/xixixi0920/article/details/104413316