小程序调起微信支付(JSAPI)注意点(PHP)

①调起统一下单接口必须传参openid,可获取到prepay_id
②调起微信支付的其中某一个参数为prepay_id(必传)
③调起微信支付时参数中没有appId,但参于签名的参数中必须有appId(I大写)
④发起退款请求必须要API证书,证书是一个压缩包在申请支付时可获取,以后不可下载
⑤可以重新更改证书,一个自然年可更换三次,两次之间有时间差,慎重更换
⑥退款需要异步回调时,发起退款必须传参数notify_url回调地址
⑦退款异步回调时,微信返回一个xml字符串转成数组后还需要对返回结果中的req_info解码,解码流程看开发文档
⑧解码时需要调用php内置函数,其中mcrypt_decrypt被高版本废弃,建议使用openssl_decrypt
⑨所有微信支付接口的发送数据和接受数据都是xml字符串

下面是开发支付中实用的方法(用的php框架是ThinkPHP3.2.3)

// 微信支付签名
public function paySign($data){
	// 去除数组中的空值
	$data = array_filter($data);
	// 如果数组中有签名删除签名
	if (isset($data['sign'])) {
		unset($data['sign']);
	}
	//按照键名字典排序
	ksort($data);
	//生成URL格式的字符串
	foreach ($data as $k => $v) {
		$string .= $k . '=' . $v . '&';
	}
	$stringSignTemp = $string . "key=" . C('APP_KEY');
	// 生成sign
	$data['sign'] = strtoupper(md5($stringSignTemp));

	return $data;
}


// 支付结果回调
public function notifyUrl(){
	$testxml = file_get_contents("php://input");
	$jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
	$result = json_decode($jsonxml,true);

	echo 'SUCCESS';
}

// 退款结果解密
protected function refundDecrypt($str){
	$key = md5(C('APP_KEY'));
	$str = base64_decode($str);
	$str = openssl_decrypt($str, 'AES-256-ECB', $key, OPENSSL_RAW_DATA);
	return $str;
}

以后有新发现或改进继续编辑此文档,以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值