第一次写,主要给自己看,记录一下
利用微信开发者工具开发商城类微信小程序,开发微信支付必不可少,但微信支付api开发文档说明压根看不懂,自己摸索,运行报错找不到错误代码解决方法
先说说我的开发流程吧
小程序前端——小程序js网络请求php后台——后台接收小程序传回数据——微信支付官网下载sdk包——微信商户配置——sdk配置——签名验证获取prepay_id——传回前端调用微信支付api——完成
想要完成微信支付就必须获取由微信系统后台传回的prepay_id,就必须要生成正确的签名
微信官方文档说明
-
微信官方文档说明https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
-
支付SDKhttps://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
做好一切准备,前端后端配置要求都编写完毕,编译运行,签名错误,检查一遍,更改商户号,商户key,编译运行,签名错误,网上百度查各种方法总结一下
- 查看小程序appid,商户号,商户key,小程序密钥是否正确匹配
- 检查签名拼接是否按要求拼接,用签名验证工具验证一下https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1
- 修改商户key,原封不动的改一次 key设置路径:微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>密钥设置
- 检查商户是否对支付目录授权,必须授权才可以,然后商户对appid授权会生成一个商户号对应
我就是败在了第4点上,检查了一遍又一遍发现没有授权目录与appid,因为商户号是可变动的,一定要与appid匹配我就是败在了第4点上,检查了一遍又一遍发现没有授权目录与appid,因为商户号是可变动的,一定要与appid匹配
签名算法
<?php
/*
* 小程序微信支付
*/
class WeixinPay {
protected $appid;
protected $mch_id;
protected $key;
protected $openid;
protected $out_trade_no;
protected $body;
protected $total_fee;
function __construct($appid, $openid, $mch_id, $key,$out_trade_no,$body,$total_fee) {
$this->appid = $appid;
$this->openid = $openid;
$this->mch_id = $mch_id;
$this->key = $key;
$this->out_trade_no = $out_trade_no;
$this->body = $body;
$this->total_fee = $total_fee;
}
public function pay() {
//统一下单接口
$return = $this->weixinapp();
return $return;
}
//统一下单接口
private function unifiedorder() {
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$jjc=$this->createNoncestr();
$parameters = array(
'appid' => $this->appid,
'body' => $this->body,
'mch_id' => $this->mch_id,
'nonce_str' => $jjc,