微信支付开发当前URL未注册的解决方案
微信支付开发当前URL未注册的解决方案
流程实现
1. OAuth2.0授权
JSAPI 支付前需要调用 登录授权接口获取到用户的 Openid 。所以需要做一次授权,这次授权是不弹出确认框的。
其实质就是在用户访问http://www.fangbei.org/wxpay/js_api_call.php
时跳转到https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://www.fangbei.org/wxpay/js_api_call.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
以此来获得code参数,并根据code来获得授权access_token及openid
其实现的详细流程可参考 微信公众平台开发(71)OAuth2.0网页授权
在微信支付的Demo中,其代码为
1 //使用jsapi接口<br>
2 $jsApi = new JsApi_pub();<br>
3 <br>
4 //=========步骤1:网页授权获取用户openid============<br>
5 //通过code获得openid<br>
6 if (!isset($_GET['code']))<br>
7 {<br>
8 //触发微信返回code码<br>
9 $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);<br>
10 Header("Location: $url"); <br>
11 }else<br>
12 {<br>
13 //获取code码,以获取openid<br>
14 $code = $_GET['code'];<br>
15 $jsApi->setCode($code);<br>
16 $openid = $jsApi->getOpenId();<br>
17 }
这一步的最终结果就是获得了当前用户的openidou9dHt0L8qFLI1foP-kj5x1mDWsM
2. 统一支付
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口
统一支付中以下参数从配置中获取,或由类自动生成,不需要用户填写$this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID<br>
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号<br>
$this->parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//终端ip <br>
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串<br>
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
在JSAPI支付中,另外填写以下参数//统一支付接口中,trade_type为JSAPI时,openid为必填参数!<br>
$unifiedOrder->setParameter("openid","$openid");//商品描述<br>
$unifiedOrder->setParameter("body","方倍工作室");//商品描述<br>
//自定义订单号,此处仅作举例<br>
$timeStamp = time();<br>
$out_trade_no = WxPayConf_pub::APPID."$timeStamp";<br>
$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号 <br>
$unifiedOrder->setParameter("total_fee","1");//总金额<br>
$unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 <br>
$unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
其他为选填参数//非必填参数,商户可根据实际情况选填<br>
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号 <br>
//$unifiedOrder->setParameter("device_info","XXXX");//设备号 <br>
//$unifiedOrder->setParameter("attach","XXXX");//附加数据 <br>
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间<br>
//$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间 <br>
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记 <br>
//$unifiedOrder->setParameter("openid","XXXX");//用户标识<br>
//$unifiedOrder->setParameter("product_id","XXXX");//商品ID
这些参数最终组成了这样的xml数据,<xml><br>
<openid></openid><br>
<br>
<out_trade_no></out_trade_no><br>
<total_fee>1</total_fee><br>
<notify_url></notify_url><br>
<trade_type></trade_type><br>
<appid></appid><br>
<mch_id>10012345</mch_id><br>
<spbill_create_ip></spbill_create_ip><br>
<nonce_str></nonce_str><br>
<sign></sign><br>
</xml>
将这些数据提交给统一支付接口https://api.mch.weixin.qq.com/pay/unifiedorder
将获得返回 如下数据<xml><br>
<return_code></return_code> <br>
<return_msg></return_msg> <br>
<appid></appid> <br>
<mch_id></mch_id> <br>
<nonce_str></nonce_str> <br>
<sign></sign> <br>
<result_code></result_code> <br>
<prepay_id></prepay_id> <br>
<trade_type></trade_type> <br>
</xml>
其中包含了最重要的预支付ID参数,prepay_id,值为 wx201410272009395522657a690389285100
3、JS API支付
前面的准备工作做好了以后,JS API根据prepay_id生成jsapi支付参数
生成代码如下
//=========步骤3:使用jsapi调起支付============$jsApi->setPrepayId($prepay_id);<br>
$jsApiParameters = $jsApi->getParameters();
生成的json数据如下{<br>
"appId": "wx8888888888888888",<br>
"timeStamp": "1414411784",<br>
"nonceStr": "gbwr71b5no6q6ne18c8up1u7l7he2y75",<br>
"package": "prepay_id=wx201410272009395522657a690389285100",<br>
"signType": "MD5",<br>
"paySign": "9C6747193720F851EB876299D59F6C7D"<br>
}
在微信浏览器中调试起js接口,代码如下<br>
<br>
<meta>
<br>
<title>微信安全支付</title>
<br>
<script><br />
//调用微信JS api 支付<br />
function jsApiCall()<br />
{<br />
WeixinJSBridge.invoke(<br />
'getBrandWCPayRequest',<br />
<?php echo $jsApiParameters; ?>,<br />
function(res){<br />
WeixinJSBridge.log(res.err_msg);<br />
//alert(res.err_code+res.err_desc+res.err_msg);<br />
}<br />
);<br />
}<br />
<br />
function callpay()<br />
{<br />
if (typeof WeixinJSBridge == "undefined"){<br />
if( document.addEventListener ){<br />
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);<br />
}else if (document.attachEvent){<br />
document.attachEvent('WeixinJSBridgeReady', jsApiCall); <br />
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);<br />
}<br />
}else{<br />
jsApiCall();<br />
}<br />
}<br />
</script><br>
<br>
<br>
<br>
<div>
<br>
<button>贡献一下</button><br>
</div>
<br>
<br>
当用户点击“贡献一下”按钮时,将弹出微信支付插件,用户可以开始支付。
4、支付通知
支付成功后,通知接口中也将收到支付成功的xml通知<xml><br>
<appid></appid> <br>
<bank_type></bank_type> <br>
<fee_type></fee_type> <br>
<is_subscribe></is_subscribe> <br>
<mch_id></mch_id> <br>
<nonce_str></nonce_str> <br>
<openid></openid> <br>
<out_trade_no></out_trade_no> <br>
<result_code></result_code> <br>
<return_code></return_code> <br>
<sign></sign> <br>
<sub_mch_id></sub_mch_id> <br>
<time_end></time_end> <br>
<total_fee>1</total_fee> <br>
<trade_type></trade_type> <br>
<transaction_id></transaction_id> <br>
</xml>
当然这是所有的支付流程,我们还需要去微信公众号后台去设置。支付授权目录
这里很重要我就是在这里折腾了很久。怎么设置呢,首先要看你支付的当前页面URL
比如是:http://www.fangbei.org/wxpay/js_api_call.php
你就必须填写:http://www.fangbei.org/wxpay/
假如是:http://www.fangbei.org/wxpay/order/id/56.html
你就必须写:http://www.fangbei.org/wxpay/order/id/
看出规律了吧,就是把最后一个反斜杠后面的内容去掉就OK了。如果还有什么问题可以留言问我。
AD:真正免费,域名+虚机+企业邮箱=0元

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Erfahren Sie anhand einführender Codebeispiele mehr über die Python-Programmierung. Python ist eine leicht zu erlernende und dennoch leistungsstarke Programmiersprache. Für Anfänger ist es sehr wichtig, die einführenden Codebeispiele der Python-Programmierung zu verstehen. In diesem Artikel finden Sie einige konkrete Codebeispiele, die Ihnen den schnellen Einstieg erleichtern. Print HelloWorldprint("HelloWorld") Dies ist das einfachste Codebeispiel in Python. Mit der Funktion print() wird der angegebene Inhalt ausgegeben

PHP-Variablen speichern Werte während der Programmlaufzeit und sind für den Aufbau dynamischer und interaktiver WEB-Anwendungen von entscheidender Bedeutung. Dieser Artikel wirft einen detaillierten Blick auf PHP-Variablen und zeigt sie anhand von 10 Beispielen aus der Praxis. 1. Benutzereingaben speichern $username=$_POST["username"];$passWord=$_POST["password"]; Dieses Beispiel extrahiert den Benutzernamen und das Passwort aus der Formularübermittlung und speichert sie zur weiteren Verarbeitung in Variablen. 2. Legen Sie den Konfigurationswert $database_host="localhost";$database_username="username";$database_pa fest

Titel: Vom Anfänger zur Meisterschaft: Code-Implementierung häufig verwendeter Datenstrukturen in der Go-Sprache. Datenstrukturen spielen eine wichtige Rolle in der Programmierung und sind die Grundlage der Programmierung. In der Go-Sprache gibt es viele häufig verwendete Datenstrukturen, und die Beherrschung der Implementierung dieser Datenstrukturen ist entscheidend, um ein guter Programmierer zu werden. In diesem Artikel werden die häufig verwendeten Datenstrukturen in der Go-Sprache vorgestellt und entsprechende Codebeispiele gegeben, um den Lesern den Einstieg bis zur Beherrschung dieser Datenstrukturen zu erleichtern. 1. Array Array ist eine grundlegende Datenstruktur, bei der es sich um eine Gruppe desselben Typs handelt.

„Beispiele zur Go-Sprachprogrammierung: Codebeispiele in der Webentwicklung“ Mit der rasanten Entwicklung des Internets ist die Webentwicklung zu einem unverzichtbaren Bestandteil verschiedener Branchen geworden. Als Programmiersprache mit leistungsstarken Funktionen und überlegener Leistung wird die Go-Sprache von Entwicklern in der Webentwicklung zunehmend bevorzugt. In diesem Artikel wird anhand spezifischer Codebeispiele erläutert, wie die Go-Sprache für die Webentwicklung verwendet wird, damit die Leser die Go-Sprache besser verstehen und zum Erstellen ihrer eigenen Webanwendungen verwenden können. 1. Einfacher HTTP-Server Beginnen wir zunächst mit a

Das einfachste Codebeispiel für die Blasensortierung in Java ist ein allgemeiner Sortieralgorithmus. Seine Grundidee besteht darin, die zu sortierende Reihenfolge durch Vergleich und Austausch benachbarter Elemente schrittweise anzupassen. Hier ist ein einfaches Java-Codebeispiel, das zeigt, wie die Blasensortierung implementiert wird: publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

So schreiben Sie mit PHP den Funktionscode für die Bestandsverwaltung im Bestandsverwaltungssystem. Die Bestandsverwaltung ist für viele Unternehmen ein unverzichtbarer Bestandteil. Für Unternehmen mit mehreren Lagern ist die Bestandsverwaltungsfunktion besonders wichtig. Durch die ordnungsgemäße Verwaltung und Nachverfolgung des Lagerbestands können Unternehmen den Lagerbestand auf verschiedene Lager verteilen, die Betriebskosten optimieren und die Effizienz der Zusammenarbeit verbessern. In diesem Artikel erfahren Sie, wie Sie mit PHP Code für Lagerverwaltungsfunktionen schreiben und erhalten relevante Codebeispiele. 1. Richten Sie die Datenbank ein, bevor Sie mit dem Schreiben des Codes für die Lagerverwaltungsfunktion beginnen.

Huawei Cloud Edge Computing Interconnection Guide: Java-Codebeispiele zur schnellen Implementierung von Schnittstellen Mit der rasanten Entwicklung der IoT-Technologie und dem Aufstieg des Edge Computing beginnen immer mehr Unternehmen, der Anwendung von Edge Computing Aufmerksamkeit zu schenken. Huawei Cloud bietet Edge-Computing-Dienste und stellt Unternehmen äußerst zuverlässige Computerressourcen und eine praktische Entwicklungsumgebung zur Verfügung, wodurch Edge-Computing-Anwendungen einfacher zu implementieren sind. In diesem Artikel erfahren Sie, wie Sie die Huawei Cloud Edge Computing-Schnittstelle schnell über Java-Code implementieren. Zuerst müssen wir die Entwicklungsumgebung vorbereiten. Stellen Sie sicher, dass Sie das Java Development Kit installiert haben (

Code-Schreibanleitung und Beispiele für die Java-Auswahlsortierung Die Auswahlsortierung ist ein einfacher und intuitiver Sortieralgorithmus. Die Idee besteht darin, jedes Mal das kleinste (oder größte) Element aus den unsortierten Elementen auszuwählen und es auszutauschen, bis alle Elemente sortiert sind. Dieser Artikel enthält eine Anleitung zum Schreiben von Code für die Auswahlsortierung und fügt spezifischen Java-Beispielcode hinzu. Algorithmusprinzip Das Grundprinzip der Auswahlsortierung besteht darin, das zu sortierende Array in zwei Teile zu unterteilen: sortiert und unsortiert. Dabei wird jeweils das kleinste (oder größte) Element aus dem unsortierten Teil ausgewählt und am Ende des sortierten Teils platziert. Wiederholen Sie das oben Gesagte
