This assumes that you have applied for a micro-letter payment
1. Micro-letter background configuration as shown
We test first, so add the test authorization directory and the test whitelist. Test Authorization directory is the directory where you want to initiate a micro-letter request.
For example, the JSAPI initiation request is typically the directory where the jsapi.php resides for the test directory, and the white list is the developer's micro-signal.
The formal Payment authorization directory cannot be the same as the test or it will be an error. Do not fill out or fill in the wrong authorization directory and test whitelist will be an error.
Error Sample:
Nansystem:access_denied
Not on the test white list
2. Configure lib/wxpay.config.php Files
The main configuration of the four items:
Const APPID = ';
Const MCHID = ';
Const KEY = ';
Const Appsecret = ';
APPID and Appsecret can be found in the micro-letter backstage.
Mchid can be found in the message sent after the application for the micro-letter payment, KEY according to the mail prompt
To the merchant platform configuration can be.
3. Visit Start index.php
First visit index.php you can see the interface
The first thing we need is JSAPI payment. But see the code index.php the bottom link. He defaults to a demo link, instead we can customize the
<ul> <li style= "Background-color: #FF7F24" ><a href= "<?php echo ' http://'. $_server[' Http_host '].$_ server[' Request_uri ']. ' Example/jsapi.php ';? > ">JSAPI payment </a></li> <li style=" Background-color: #698B22 "><a href=" <?php Echo ' http:// '. $_server[' http_host '].$_server[' Request_uri '. ' Example/micropay.php ';? > "> Credit card payment </a></li> <li style=" Background-color: #8B6914 "><a href=" <?php echo ' http://'. $ _server[' http_host '].$_server[' Request_uri '. ' Example/native.php ';? > "> Sweep code Payment </a></li> <li style=" Background-color: #CDCD00 "><a href=" <?php echo ' http://'. $ _server[' http_host '].$_server[' Request_uri '. ' Example/orderquery.php ';? > "> Order query </a></li> <li style=" Background-color: #CD3278 "><a href=" <?php echo ' http://'. $ _server[' http_host '].$_server[' Request_uri '. ' Example/refund.php ';? > "> Order refund </a></li> <li style=" Background-color: #848484 "><a href=";? php echo ' http://'. $_server[' http_host '].$_server[' Request_uri '. ' Example/refundquery.php ';? > "> Refund Inquiry </a></li> <li style=" Background-color: #8EE5EE "><a href=" <?php echo ' http://'. $ _server[' http_host '].$_server[' Request_uri '. ' Example/download.php ';? > "> Download order </a></li> </ul>
Of course you can also write directly to death for your own access links.
4. JSAPI Payment
Necessary code resolution:
$logHandler = new Clogfilehandler (". /logs/". Date (' y-m-d '). Log ");
$log = Log::init ($logHandler, 15);
The Call log class can be passed $log->debug (' Test '); Print debugging information. In fact, you can also use $Log directly::D ebug (' Test '); To debug
$tools = new Jsapipay ();
$openId = $tools->getopenid ();
Mostly to get OpenID. The Getopenid () function is defined in the file WxPay.JsApiPay.php file
Public Function Getopenid ()
{//
via code to obtain OpenID
if (!isset ($_get[' code ')) {
//Trigger micro-letter return code code
$ BaseURL = UrlEncode (' http://'. $_server[' Http_host '].$_server['s ' php_self '].$_server[' query_string ']);
$url = $this->__createoauthurlforcode ($BASEURL);
Header ("Location: $url");
Exit ();
} else {
//Get code code to get OpenID
$code = $_get[' code '];
$openid = $this->getopenidfrommp ($code);
return $openid;
}
$BASEURL is actually in order to jump back to this page. You can continue tracking functions __createoauthurlforcode () in fact, through the micro-letter Auth2.0 to obtain OpenID
Reference Link: http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
This will require you to set up the Web licensing interface for the micro-letter as well.
Access to Openid can invoke the unified next single interface of the micro-credit payment. Back to file jsapi.php the following code
$input = new Wxpayunifiedorder ();
$input->setbody ("test");
$input->setattach ("test");
$input->setout_trade_no (Wxpayconfig::mchid.date ("Ymdhis"));
$input->settotal_fee ("1");
$input->settime_start (Date ("Ymdhis"));
$input->settime_expire (Date ("Ymdhis", Time () +));
$input->setgoods_tag ("test");
$input->setnotify_url ("http://paysdk.weixin.qq.com/example/notify.php");
$input->settrade_type ("Jsapi");
$input->setopenid ($openId);
$order = Wxpayapi::unifiedorder ($input);
Echo ' <font color= "#f00" ><b> Unified Single payment information </b></font><br/> ';
Printf_info ($order);
$jsApiParameters = $tools->getjsapiparameters ($order);
Here's the code:
$input->setattach ("test");
If the value is changed to $input->setattach ("test is Attach"), there will be a bug behind it, in fact, this parameter is not necessary simply can be removed.
Code:
$input->setnotify_url (http://paysdk.weixin.qq.com/example/notify.php);
is to set the URL to receive notification of payment results here is the default demo link we can set to our:
$input->setnotify_url (dirname (' http://'. $_server[' http_host '].$_server[' Request_uri ']). ' /notify.php ');
Of course, you can also choose to write directly to death.
The function Unifiedorder ($input) can go to the WxPay.Api.php file tracking, in fact, is to call the unified next single interface.
One of the code that needs to be changed in WxPay.Api.php is:
The asynchronous notification URL is not set, then use the URL in the configuration file
if (! $INPUTOBJ->isnotify_urlset ()) {
$inputObj->setnotify_url ( Wxpayconfig::notify_url);//Asynchronous Notification URL
}
is when the Notifyurl is not set to go back to the configuration file, but there is no setting at all in the configuration file.
So you can choose to add this configuration to the configuration file WxPay.Config.php, or you can write a default notify link directly.
function Getjsapiparameters () is to obtain JSAPI payment parameters to the variable $jsApiParameters convenient in the following JS call
jsapi.php in JS code:
function Jsapicall ()
{
weixinjsbridge.invoke (
' getbrandwcpayrequest '),
<?php echo $ Jsapiparameters,
function (res) {
WeixinJSBridge.log (res.err_msg);
alert (res.err_code+res.err_desc+res.err_msg);
}
);
function Callpay ()
{
if (typeof Weixinjsbridge = = "undefined") {
if (document.addeventlistener) {
Document.addeventlistener (' Weixinjsbridgeready ', Jsapicall, false);
} else if (document.attachevent) {
document.attachevent (' Weixinjsbridgeready ', jsapicall);
Document.attachevent (' Onweixinjsbridgeready ', jsapicall);
}
else{
Jsapicall ();
}
The call to the immediate payment button is the Callpay () function, and he will invoke the Jsapicall () function to open the payment program.
Then enter the password to complete the payment.
After completing the payment page click Finish will return to this payment page and pop out payment success prompt box
This is actually the JS function Jsapicall inside the Alter pop-up dialog box
Where res.err_msg for Get_brand_wcpay_request:ok indicates that the front end of the payment success, we can according to this will pay jump to the success page.
But this is not believable. Verify that the payment is successful or that the business logic should be handled through notify.php.
5. Notice of payment Results notify.php
In fact, the most important code on this page is two lines.
$notify = new Paynotifycallback ();
$notify->handle (FALSE);
Most of the logic handles files in the Handle function WxPay.Notify.php
Final public Function Handle ($needSign = True)
{
$msg = "OK";
When False is returned, the Notifycallback callback failure is invoked in notify to obtain a signature checksum failure, at which point the direct reply fails
$result = wxpayapi::notify (Array ($this, ' Notifycallback '), $msg);
if ($result = = False) {
$this->setreturn_code ("FAIL");
$this->setreturn_msg ($msg);
$this->replynotify (false);
return;
} else {
//The branch succeeds in callback to the Notifycallback method, after the process completes
$this->setreturn_code ("SUCCESS");
$this->setreturn_msg ("OK");
}
$this->replynotify ($needSign);
}
Main code:
$result = wxpayapi::notify (Array ($this, ' notifycallback '), $msg);
Trace function notify file WxPay.Api.php
public static function Notify ($callback, & $msg)
{
//Get notification data
$xml = $GLOBALS [' Http_raw_post_data '];
Verify that the signature
try {
$result = Wxpayresults::init ($xml);
} catch (Wxpayexception $e) {
$msg = $e-> If success is returned ErrorMessage ();
return false;
}
Return Call_user_func ($callback, $result);
}
Through $GLOBALS [' Http_raw_post_data ']; Get the gay data then Init function to validate the signature, and so on. Verification successfully run code
Return Call_user_func ($callback, $result);
That is, a callback function is invoked, the Notifycallback () function passes the argument $result the Notifyprocess () function that we override is invoked in the Notifycallback function (this function is overridden in notify.php)
Notifyprocess () and no problem will set the XML information to return success
$this->setreturn_code ("SUCCESS");
$this->setreturn_msg ("OK");
And finally call the function $this->replynotify ($needSign); The result of Echo success
function replynotify need to modify one code:
Final Private Function replynotify ($needSign = True)
{
//if required to sign if
($needSign = = True &&
$this- >getreturn_code ($return _code) = = "SUCCESS")
{
$this->setsign ();
}
Wxpayapi::replynotify ($this->toxml ());
$this->getreturn_code ($return _code) = = "SUCCESS")
To
$this->getreturn_code () = = "SUCCESS")
Can.
So the whole process is over. The above mentioned the pass order parameter
$input->setattach ("test");
If I set the value to test this is attach (in fact, there is a bug as long as there are spaces)
Order information as shown in figure
Can see attach information is normal, of course, payment is normal without any problems.
However, the discovery always receives a notify notification, meaning that it does not return the correct result notification to the micro-trust server.
Notification data sent from the print server
You can see that the attach is test+this+is+attach that the space is converted to a plus
The signature that is received by the print and the signature found by the program is different, that is, the received result is abnormal.
So if we want to use the value of attach, we can't have spaces or simply not use this parameter
(Wait for the micro-letter to fix the bug, it could be somewhere on my side.) - -#)
So the JSAPI payment of the micro-letter payment is analyzed and finished roughly.