漫谈微信支付-APP支付


本文对微信APP支付的实现过程进行详细介绍。

概述

APP支付适用于在移动端APP中集成微信支付的功能,支付流程一般为:

  • 在APP内选择商品下单;
  • 商户后台调用统一下单接口;
  • 商户后台根据统一下单接口返回的prepay_id,再按签名规范重新生成签名后,将数据传输给APP调起微信进行支付;
  • 用户微信客户端收到支付成功通知,微信后台将支付结果异步回调给商户后台。

APP支付和下一节将要介绍的公共号支付相对于扫码支付,都多了一步调起微信的过程。


实现过程

  • SDK修改
    在开篇漫谈微信支付中我们介绍过APP支付需要到微信开放平台注册为开发者并创建APP后才能使用,因此APP支付类型使用的APPID与扫码支付、公共号支付使用的APPID是不同的,如果想使同一份SDK并且同时支持APP支付和扫码支付,则需要对SDK的配置文件作进行修改。

◆ 修改lib/WxPayConfig.php

1
2
3
4
5
6
const APPID = 'wx426...';
const MCHID = '122...';
const KEY = 'e10adc...';
const APPSECRET = '01c6d59a3f...';
//add by yuri 2016/6/20 添加APP支付对应的APPID
const APP_APPID = 'XXXXXXXXXX';

在WxPayConfig中新增一常量APP_APPID,取值为APP支付申请的APPID。

◆ 修改lib/WxPay.Api.php
修改统一下单接口unifiedOrder,将:

1
$inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID

替换为:

1
2
3
4
5
6
//modify by yuri 2016/6/22 添加配置参数APP_APPID支持APP支付
if($inputObj->GetTrade_type() == "APP") {
$inputObj->SetAppid(WxPayConfig::APP_APPID);//APP支付
} else {
$inputObj->SetAppid(WxPayConfig::APPID);//扫码支付或者公共号支付的公众账号ID
}

这样在调用统一下单时会根据支付类型不同调用不同的APPID,APP支付在调用统一下单接口时,trade_type要设置为“APP”。

1
2
3
4
5
6
7
8
9
10
$input = new WxPayUnifiedOrder();
$input->SetBody($title);
$input->SetAttach($attach);
$input->SetOut_trade_no($orderid);
$input->SetTotal_fee($total_fee);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetNotify_url("http://XXX.com/test/WxPayCallBack");
$input->SetTrade_type("APP");
$order = WxPayApi::unifiedOrder($input);

统一下单完成后,微信服务器会返回预支付交易prepay_id,然后再构造调起微信支付的参数返回给APP。
APP支付

1
2
3
4
5
6
7
$result['appid'] = $order['appid'];
$result['partnerid'] = WxPayConfig::MCHID;
$result['prepayid'] = $order['prepay_id'];
$result['noncestr'] = $order['nonce_str'];
$result['timestamp'] = time();
$result['package'] = 'Sign=Wxpay';
$sign = Common::makeSign($result); //重新生成签名

最后的$sign = Common::makeSign($result);是我将lib/WxPay.Data.php中的MakeSign作为公共方法提出,放到类Common中进行使用。
调起微信进行支付,支付完成后,微信系统会将支付结果异步回调统一下单接口中设置的notify_url。关于微信支付异步回调的处理过程参见上一篇漫谈微信支付-扫码支付中的支付结果回调 回调并发控制部分。

有关APP支付的实现已介绍完毕,在下一节漫谈微信支付-公共号支付将会介绍公共号支付的实现过程。
转载请注明出处:http://yurixu.com/blog/2016/07/22/漫谈微信支付-APP支付/

分享 本文总阅读量
< !-- add by yurixu 替换Google的jquery并且添加判断逻辑 -->