微信支付通过服务端生成支付链接在ios唤起支付界面
2016-05-06 00:00
706 查看
摘要: 通过php服务端自定义订单信息,请求微信支付接口,拼接唤起微信支付的链接,提交给ios客户端,ios客户端通过该链接可唤起微信支付,支付完成后,php回调微信交易信息做相应的业务数据处理,这样做的好处是,ios端无需接入微信支付sdk,方便后期应用的移植,也可减小应用的冗余。
<?php
// STEP 0. 账号帐户资料
//更改商户把相关参数后可测试
$APP_ID="" ; //APPID
$APP_SECRET="";//appsecret
//商户号,填写商户对应参数
$MCH_ID="";
//商户API密钥,填写相应参数
$PARTNER_ID="";
//支付结果回调页面
$NOTIFY_URL="";
//STEP 1. 构造一个订单。
$order=array(
"body" => "V3支付测试",
"appid" => $APP_ID,
"device_info" => "APP-001",
"mch_id" => $MCH_ID,
"nonce_str" => mt_rand(),
"notify_url" => $NOTIFY_URL,
"out_trade_no" => time(),
"spbill_create_ip" => "196.168.1.1",
"total_fee" => 1,//这里的最小单位时分,跟支付宝不一样。1就是1分钱。只能是整形。
"trade_type" => "APP"
);
ksort($order);
//STEP 2. 签名
$sign="";
foreach ($order as $key => $value) {
if($value&&$key!="sign"&&$key!="key"){
$sign.=$key."=".$value."&";
}
}
$sign.="key=".$PARTNER_ID;
$sign=strtoupper(md5($sign));
//STEP 3. 请求服务器
$xml="<xml>\n";
foreach ($order as $key => $value) {
$xml.="<".$key.">".$value."</".$key.">\n";
}
$xml.="<sign>".$sign."</sign>\n";
$xml.="</xml>";
7fe0
// print_R($xml);
// die;
$opts = array(
'http' =>
array(
'method' => 'POST',
'header' => 'Content-type: text/xml',
'content' => $xml
),
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
)
);
$context = stream_context_create($opts);
$result = file_get_contents('https://api.mch.weixin.qq.com/pay/unifiedorder', false, $context);
$result = simplexml_load_string($result,null, LIBXML_NOCDATA);
//使用$result->nonce_str和$result->prepay_id。再次签名返回app可以直接打开的链接。
echo "<pre>";
print_R($result);
die;
$input=array(
"noncestr"=>"".$result->nonce_str,
"prepayid"=>"".$result->prepay_id,//上一步请求微信服务器得到nonce_str和prepay_id参数。
"appid"=>$APP_ID,
"package"=>"Sign=WXPay",
"partnerid"=>$MCH_ID,
"timestamp"=>time(),
);
ksort($input);
$sign="";
foreach ($input as $key => $value) {
if($value&&$key!="sign"&&$key!="key"){
$sign.=$key."=".$value."&";
}
}
$sign.="key=".$PARTNER_ID;
echo "<pre>";
print_R($input);
$sign=strtoupper(md5($sign));
Print_R($sign);
die;
$iOSLink=sprintf("weixin://app/%s/pay/?nonceStr=%s&package=Sign%%3DWXPay&partnerId=%s&prepayId=%s&timeStamp=%s&sign=%s&signType=SHA1",$APP_ID,$input["noncestr"],$MCH_ID,$input["prepayid"],$input["timestamp"],$sign);
echo $iOSLink;
//或者在Safari中打开以便测试。
echo "<h1><a href='${iOSLink}'>微信支付</a></h1>";
<?php
// STEP 0. 账号帐户资料
//更改商户把相关参数后可测试
$APP_ID="" ; //APPID
$APP_SECRET="";//appsecret
//商户号,填写商户对应参数
$MCH_ID="";
//商户API密钥,填写相应参数
$PARTNER_ID="";
//支付结果回调页面
$NOTIFY_URL="";
//STEP 1. 构造一个订单。
$order=array(
"body" => "V3支付测试",
"appid" => $APP_ID,
"device_info" => "APP-001",
"mch_id" => $MCH_ID,
"nonce_str" => mt_rand(),
"notify_url" => $NOTIFY_URL,
"out_trade_no" => time(),
"spbill_create_ip" => "196.168.1.1",
"total_fee" => 1,//这里的最小单位时分,跟支付宝不一样。1就是1分钱。只能是整形。
"trade_type" => "APP"
);
ksort($order);
//STEP 2. 签名
$sign="";
foreach ($order as $key => $value) {
if($value&&$key!="sign"&&$key!="key"){
$sign.=$key."=".$value."&";
}
}
$sign.="key=".$PARTNER_ID;
$sign=strtoupper(md5($sign));
//STEP 3. 请求服务器
$xml="<xml>\n";
foreach ($order as $key => $value) {
$xml.="<".$key.">".$value."</".$key.">\n";
}
$xml.="<sign>".$sign."</sign>\n";
$xml.="</xml>";
7fe0
// print_R($xml);
// die;
$opts = array(
'http' =>
array(
'method' => 'POST',
'header' => 'Content-type: text/xml',
'content' => $xml
),
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
)
);
$context = stream_context_create($opts);
$result = file_get_contents('https://api.mch.weixin.qq.com/pay/unifiedorder', false, $context);
$result = simplexml_load_string($result,null, LIBXML_NOCDATA);
//使用$result->nonce_str和$result->prepay_id。再次签名返回app可以直接打开的链接。
echo "<pre>";
print_R($result);
die;
$input=array(
"noncestr"=>"".$result->nonce_str,
"prepayid"=>"".$result->prepay_id,//上一步请求微信服务器得到nonce_str和prepay_id参数。
"appid"=>$APP_ID,
"package"=>"Sign=WXPay",
"partnerid"=>$MCH_ID,
"timestamp"=>time(),
);
ksort($input);
$sign="";
foreach ($input as $key => $value) {
if($value&&$key!="sign"&&$key!="key"){
$sign.=$key."=".$value."&";
}
}
$sign.="key=".$PARTNER_ID;
echo "<pre>";
print_R($input);
$sign=strtoupper(md5($sign));
Print_R($sign);
die;
$iOSLink=sprintf("weixin://app/%s/pay/?nonceStr=%s&package=Sign%%3DWXPay&partnerId=%s&prepayId=%s&timeStamp=%s&sign=%s&signType=SHA1",$APP_ID,$input["noncestr"],$MCH_ID,$input["prepayid"],$input["timestamp"],$sign);
echo $iOSLink;
//或者在Safari中打开以便测试。
echo "<h1><a href='${iOSLink}'>微信支付</a></h1>";
相关文章推荐
- 微信三级分销你知道多少?
- 【原创】微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析
- 关于微信公众平台测试号配置失败的问题
- 生成格雷码+微信红包
- 小程序:全排列
- 微信公众平台深度开发Java版 v2.0(第一季)完整版
- MVC微信浏览器图片上传(img转Base64)
- android 微信朋友圈微博分享
- Scrapy框架结合Spynner采集需进行js,ajax动态加载的网页并提取网页信息(以采集微信公众号文章列表为例)
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
- 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复
- 微信开发学习总结(二)——微信开发入门
- 微信开发学习总结(一)——微信开发环境搭建
- 一个判断三角形形状的小程序
- 微信公众平台和开放平台的区别
- 微信公众平台
- 微信网页授权
- 使用微信JS-SDK调用微信浏览器的接口
- 此图片来自微信公众平台 解决方法
- 如何做起来一个微信公众号