微信支付(简要示例)

Generral

微信支付需要微信公众号申请,申请微信支付,申请成功后,支付Server端需要:

1、微信公众号唯一标识(APPID)
2、商户号(MMCHID)
3、商户支付密钥(KEY)
4、公众账号secert(APPSECERT)
5、证书(仅退款、撤销订单时需要)

通常,H5支付和APP支付需要申请两个以上信息,分别处理,Server端需要根据来源,读取不同的配置文件。

JSAPI支付

该类别主要用于H5,只能在微信浏览器中操作。

页面地址重定向,获取微信code,以得到openid,参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//获取微信openid
$code = '';
if(!empty($_GET['code']))
$code = $_GET['code'];
if(empty($code)){
$this->wxRedirect();
if(!empty($_GET['code']))
$code = $_GET['code'];
}
$data = Cm_WxAuth::getOauthToken($code);
var_dump($data);
//重定向
private function wxRedirect() {
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$redirectUrl = Cm_WxAuth::getCode($url);
$this->redirect($redirectUrl);
}
//获取重定向URL
public static function getCode($redirect) {
//加载微信支付配置
$wxConf = Cm_Conf::getCmConf('wxpay', true);
$wxConf = $wxConf['mp'];
$query = array(
'appid' => $wxConf['APPID'],
'redirect_uri' => $redirect,
'response_type' => 'code',
'scope' => 'snsapi_base',
);
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?" . http_build_query($query) . "#wechat_redirect";
return $url;
}
public static function getOauthToken($code) {
//加载微信支付配置
$wxConf = Cm_Conf::getCmConf('wxpay', true);
$wxConf = $wxConf['mp'];
$query = array(
'appid' => $wxConf['APPID'],
'secret' => $wxConf['APPSECRET'],
'code' => $code,
'grant_type' => 'authorization_code',
);
$url = self::API_OAUTH_TOKEN . "?" . http_build_query($query);
$strJson = Cm_Http::get($url);
$res = json_decode($strJson, true);
return $res;
}