尊敬的微信支付商户:
近期我们通过安全技术手段发现,有部分商户在调用微信支付接口时,未能严格按照接口文档进行开发,存在安全隐患。请根据附录中的检查项对自身系统和代码进行检查。部分代码可参考官方最新版的SDK(下载地址)
【附录】接口开发安全检查项
1、保管好自己的API证书和API密钥,并且定期更新(建议至少3个月更新一次)。有关使用证书和密钥的内容详见详细说明
2、支付完成后,需要再次调用查询订单接口核对订单状态,否则可能导致订单状态错误,给商户造成资金损失
以下示例选自PHP版SDK代码
/**
*
* 查询订单,WxPayOrderQuery中out_trade_no、transaction_id至少填一个
* appid、mchid、spbill_create_ip、nonce_str不需要填入
* @param WxPayOrderQuery $inputObj
* @param int $timeOut
* @throws WxPayException
* @return 成功时返回,其他抛异常
*/
public static function orderQuery($inputObj, $timeOut = 6)
{
$url = "https://api.mch.weixin.qq.com/pay/orderquery";
//检测必填参数
if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) {
throw new WxPayException("订单查询接口中,out_trade_no、transaction_id至少填一个!");
}
$inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID
$inputObj->SetMch_id(WxPayConfig::MCHID);//商户号
$inputObj->SetNonce_str(self::getNonceStr());//随机字符串
$inputObj->SetSign();//签名
$xml = $inputObj->ToXml();
$startTimeStamp = self::getMillisecond();//请求开始时间
$response = self::postXmlCurl($xml, $url, false, $timeOut);
$result = WxPayResults::Init($response);
self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间
return $result;
}
3、对各种微信支付返回结果(支付结果通知、查询订单等)进行签名校验,否则可能导致伪造支付结果等风险,给商户造成资金损失
以下示例选自PHP版SDK代码
微信团队
2015年07月02日