微信APP支付服务端接入(PHP)
本文于428天之前发表,文中内容可能已经过时。
第一步:申请微信APP支付
微信开放平台是商户APP接入微信支付开放接口的申请入口,通过此平台可申请微信APP支付。
第二步:配置商户支付密钥
微信商户平台是微信支付相关的商户功能集合,登录微信商户平台后按以下步骤操作:
1.点击帐户中心——操作证书——安装安全控件——安装操作证书(要验证手机号码)
2.点击帐户中心——API安全——设置API密钥——确认——新密钥——手机验证码——登录密码
第三步:集成和开发
集成服务端SDK
微信APP支付统一下单示例
$input = new WxPayUnifiedOrder();
$input->SetBody("test"); //商品描述
$input->SetOut_trade_no("商户订单号");
$input->SetTotal_fee("1"); //订单总金额,注意单位为分
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetNotify_url("商户外网可以访问的异步地址");
$input->SetTrade_type("APP");
$order = WxPayApi::unifiedOrder($input); //调用统一下单接口
调起支付
商户服务器生成支付订单,先调用【统一下单API】生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:
$order_data = $WxPayApi->GetAppParameters($order); //调起支付所需的请求参数
GetAppParameters()是外加的代码,微信SDK中没有这个方法,下面是在微信SDK中代码APP支付补充部分。
在WxPay.Api.php中补充代码:
/**
*
* 获取App支付的参数
* @param array $UnifiedOrderResult 统一支付接口返回的数据
* @throws WxPayException
*
* @return $parameters
*/
public function GetAppParameters($UnifiedOrderResult)
{
if(!array_key_exists("appid", $UnifiedOrderResult)
|| !array_key_exists("prepay_id", $UnifiedOrderResult)
|| $UnifiedOrderResult['prepay_id'] == ""
|| !array_key_exists("mch_id", $UnifiedOrderResult)
|| $UnifiedOrderResult['mch_id'] == "")
{
throw new WxPayException("参数错误");
}
$app = new WxPayAppPay();
$app->SetAppid($UnifiedOrderResult["appid"]);
$app->SetPrepayId($UnifiedOrderResult["prepay_id"]);
$app->SetPartnerId($UnifiedOrderResult['mch_id']);
$timeStamp = time();
$app->SetTimeStamp("$timeStamp");
$app->SetNonceStr(WxPayApi::getNonceStr());
$app->SetPackage("Sign=WXPay");
$app->SetPaySign($app->MakeSign());
$parameters = $app->GetValues();
return $parameters;
}
在WxPay.Data.php中补充代码:
/**
*
* 提交App输入对象
* @author lin
*
*/
class WxPayAppPay extends WxPayDataBase
{
/**
* 设置微信分配的公众账号ID
* @param string $value
**/
public function SetAppid($value)
{
$this->values['appid'] = $value;
}
/**
* 设置预支付交易会话ID
* @param string $value
**/
public function SetPrepayId($value)
{
$this->values['prepayid'] = $value;
}
/**
* 设置商户号ID
* @param string $value
**/
public function SetPartnerId($value)
{
$this->values['partnerid'] = $value;
}
/**
* 设置支付时间戳
* @param string $value
**/
public function SetTimeStamp($value)
{
$this->values['timestamp'] = $value;
}
/**
* 随机字符串
* @param string $value
**/
public function SetNonceStr($value)
{
$this->values['noncestr'] = $value;
}
/**
* 设置订单详情扩展字符串
* @param string $value
**/
public function SetPackage($value)
{
$this->values['package'] = $value;
}
/**
* 设置签名方式
* @param string $value
**/
public function SetPaySign($value)
{
$this->values['sign'] = $value;
}
}
回调处理的示列
$WxPay = new \WxPayResults();
header('Content-type: text/xml');
$returnResult = $GLOBALS['HTTP_RAW_POST_DATA']; //接收微信发送的信息
$res = $WxPay::Init($returnResult);
if(res['result_code'] == 'SUCCESS'){
/*
* 业务处理
*/
$success = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
exit($success);//回调结果通知
}