①调起统一下单接口必须传参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;
}
以后有新发现或改进继续编辑此文档,以上。